home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Texteditors / Origami / Sources / doc / manual.MS < prev    next >
Text File  |  1996-09-26  |  180KB  |  6,151 lines

  1. .\"{{{}}}
  2. .\"{{{  Notes
  3. .\" I wrote this manual using Origami, groff 1.08 and the -ms macros.
  4. .\" It documents *everything* of Origami, so it is worth to have read it
  5. .\" at least once to get an overview about all features.
  6. .\"
  7. .\" Michael Haardt
  8. .\"}}}
  9. .\"{{{  roff definitions
  10. .\" Although I hate macros in documents, there does not seem
  11. .\" to be another way for this manual.  I hope that these macros
  12. .\" will work with every existing roff and -ms package.
  13. .\"
  14. .\"{{{  index
  15. .\"{{{  iX simple index
  16. .de iX
  17. .if \n(tM .tm .iX \\n% \\$1
  18. ..
  19. .\"}}}
  20. .\"{{{  eX example index
  21. .de eX
  22. .if \n(tM .tm .eX \\n% \\$1
  23. ..
  24. .\"}}}
  25. .\"{{{  dX definition index
  26. .de dX
  27. .if \n(tM .tm .dX \\n% \\$1
  28. ..
  29. .\"}}}
  30. .\"}}}
  31. .\"{{{  nH
  32. .ds h1
  33. .de nH
  34. .if \\$1==1 \{\
  35. .ds h1 \\$2
  36. .bp
  37. .\}
  38. .NH \\$1
  39. \\$2
  40. .if \n(tM \{\
  41. .tm .tC \\n% \\$1 \\$2
  42. .iX "\\$2"
  43. .\}
  44. ..
  45. .\"}}}
  46. .\"{{{  macros for items (can be nested):  header, indented body
  47. .\"{{{  internal item macros, not used outside these definitions
  48. .\"{{{  set vars to not in item
  49. .nr PD 1v
  50. .nr iT 0
  51. .\"}}}
  52. .\"{{{  .hI: header of item
  53. .de hI
  54. .KS
  55. .LP
  56. ..
  57. .\"}}}
  58. .\"{{{  .tI: text for item
  59. .de tI
  60. .ie \\n(iT \{\
  61. .RS .4c
  62. .\}
  63. .el .RS .75c
  64. .nr PD .2v
  65. .LP
  66. .nr PD .3v
  67. .nr iT 1+\\n(iT
  68. ..
  69. .\"}}}
  70. .\"{{{  .eI: end item
  71. .de eI
  72. .RE
  73. .KE
  74. .nr iT \\n(iT-1
  75. .if !\\n(iT .nr PD 1v
  76. ..
  77. .\"}}}
  78. .\"}}}
  79. .\"{{{  item with header    bI Ib
  80. .de bI
  81. .hI
  82. \\$1
  83. .tI
  84. ..
  85. .de Ib
  86. .eI
  87. ..
  88. .\"}}}
  89. .\"{{{  item without header nI In
  90. .de nI
  91. .KS
  92. .tI
  93. ..
  94. .de In
  95. .eI
  96. ..
  97. .\"}}}
  98. .\"{{{  item without body   sI Is
  99. .de sI
  100. .hI
  101. \\$1
  102. .ie \\n(iT .RS .5c
  103. .el .RS .75c
  104. .nr iT 1+\\n(iT
  105. ..
  106. .de Is
  107. .eI
  108. ..
  109. .\"}}}
  110. .\"}}}
  111. .\"{{{  warning
  112. .de wA
  113. .LP
  114. \fBWarning\fP:
  115. ..
  116. .\"}}}
  117. .\"{{{  note beside
  118. .de nB
  119. .LP
  120. \fBN.B.\fP:
  121. ..
  122. .\"}}}
  123. .\"{{{  some text-variables
  124. .\"{{{  our official home in netland :)
  125. .ds ac @pool.informatik.rwth-aachen.de
  126. .\"}}}
  127. .\"{{{  TEX
  128. .ds Tx T\v'2p'E\v'-2p'X
  129. .\"}}}
  130. .\"{{{  page footer/header
  131. .ds LH User Guide
  132. .ds CH - % -
  133. .ds RH \\*(h1
  134. .ds LF Origami >>>MAJOR_VERSION<<<.>>>MINOR_VERSION<<<.>>>REVISION<<<
  135. .ds CF - % -
  136. .ds RF October 1993
  137. .\"}}}
  138. .\"}}}
  139. .\"{{{  text-macros, need later, but do not know exactly when, so defined here
  140. .\"{{{  warning, about counting lines
  141. .de lC
  142. .wA
  143. the line count begins at beginning of file.  Versions older than 1.6.17 used
  144. the top of entered fold as the starting point for counting!
  145. ..
  146. .\"}}}
  147. .\"{{{  the text for exit-codes and environment variables
  148. .nr sS 0
  149. .de sS
  150. .ie \\n(sS \{\
  151. .LP
  152. .iX >>>ORIFILE<<<
  153. .iX >>>ORILINE<<<
  154. .iX >>>ORIWORD<<<
  155. .iX >>>ORIXPOS<<<
  156. .iX >>>ORIYPOS<<<
  157. .iX >>>ORIPID<<<
  158. \\$1 uses the same environment, shell and exit handling as \\*(eV.
  159. .\}
  160. .el \{\
  161. .ds eV \\$1
  162. .nr sS 1
  163. .LP
  164. .dX >>>ORIFILE<<<
  165. .dX >>>ORILINE<<<
  166. .dX >>>ORIWORD<<<
  167. .dX >>>ORIXPOS<<<
  168. .dX >>>ORIYPOS<<<
  169. .dX >>>ORIPID<<<
  170. .LP
  171. If command line option \fB\-S\fP\fIshell\fP is given, \fIshell\fP is used (the
  172. empty word for \fIshell\fP disables this command).  Otherwise environment
  173. variable \fB>>>SHELL<<<\fP (default for \fB>>>SHELL<<<\fP, if empty or not
  174. defined is \fB>>>BOURNE_SHELL<<<\fP) is used to get the shell name.
  175. .LP
  176. The exit code of the called command is stored in the OCL-variable
  177. \fB>>>OCL_ARG_V<<<\fP (\-1, if no correct value can be given).
  178. Environment variables \fB>>>ORIFILE<<<\fP, \fB>>>ORILINE<<<\fP and
  179. \fB>>>ORIWORD<<<\fP are set to current filename, textline and word.
  180. Word is the sequence of \fBa\fP..\fBzA\fP..\fBZ_\fP, where the cursor
  181. stands on.  Environment variables \fB>>>ORIXPOS<<<\fP and
  182. \fB>>>ORIYPOS<<<\fP are set to x position (characters 1,..) and y
  183. position (line 1,..) in file.  Environment variable \fB>>>ORIPID<<<\fP
  184. is set to Origami's process id.
  185. .lC
  186. .\}
  187. ..
  188. .\"}}}
  189. .\"{{{  prompt-commands do not store in define-macro-mode
  190. .de pM
  191. .wA
  192. if \\$1 is called during \fB>>>O_DEF_MACRO<<<\fP is active, the given input
  193. will not be stored in the macro!  This command does not activate the
  194. \fBbegin-\fP / \fB>>>PRO_OUT<<<\fP, because you can do it explicitly
  195. in the OCL-code.
  196. ..
  197. .\"}}}
  198. .\"{{{  editor_files
  199. .de eF
  200. .LP
  201. .iX "editor files"
  202. \\$1 adds the file to the list of edited files, if the file is not in
  203. this list.
  204. ..
  205. .\"}}}
  206. .\"}}}
  207. .\"}}}
  208. .\"{{{  Title, abstract and tc
  209. .\"{{{  Title
  210. .TL
  211. .LG
  212. Origami
  213. .SM
  214. .br
  215. User Guide
  216. .br
  217. .br
  218. .AU
  219. Michael Haardt
  220. u31b3hs\*(ac
  221. .AI
  222. R\(:utscherstra\(sse 155/1703
  223. 52072 Aachen
  224. Germany
  225. .\"}}}
  226. .\"{{{  abstract
  227. .AB
  228. This document describes all the functions of Origami and the syntax and
  229. semantics of its control language OCL.  The first part describing the
  230. Origami commands is intended to be read by new users, who need more than
  231. just a description of bindings as given in the reference cards.  The
  232. second part is intended for OCL programmers.  It is very usefull
  233. if you would like to create or modify bindings.  This document assumes
  234. that you are familiar with the folding concept, as described in the
  235. introduction manual.
  236. .AE
  237. .\"}}}
  238. .\"{{{  table of contents
  239. .so tc.AMS
  240. .\"}}}
  241. .\"}}}
  242. .\"{{{  Using Origami
  243. .nH 1 "Using Origami"
  244. .\"{{{  Getting started
  245. .nH 2 "Getting Started"
  246. .LP
  247. It is assumed that Origami is installed and ready to use on your system.
  248. It is invoked by typing \fBorigami\fP at the system prompt.  Filenames
  249. may be typed after \fBorigami\fP \(em if this is not done a prompt for a
  250. filename will be issued.
  251. .LP
  252. If Origami recognizes filenames, starting with a symbolic home directory
  253. (marked with \fB~\fP[\fIusername\fP]), Origami tries to use the
  254. corresponding path instead.  Therefore the \fBpasswd\fP database is
  255. read, if \fIusername\fP is given or the value of environment variable
  256. \fB>>>HOME<<<\fP is used.
  257. .LP
  258. If you have not installed any resource files yourself, Origami will
  259. startup with default files, installed in your Origami directory.  The
  260. resources files can be changed.  Look in chapter \fBProgramming in
  261. OCL\fP for more details.
  262. .\"{{{  linelength
  263. .LP
  264. .dX linelength
  265. Origami can handle lines up to >>>LINELEN<<< characters.  Reading file with
  266. longer lines will break these lines.  In this case, a warning appears at
  267. the bottom of the screen.
  268. .\"}}}
  269. .\"{{{  ctrl-char
  270. .LP
  271. .iX ctrl-char
  272. .iX "null character"
  273. .iX display
  274. Control characters will be displayed as \fB>>>CTRL_MARK<<<\fP followed
  275. by the ASCII coding of the character (\fB>>>CTRL_CHARS<<<\fP for 0..31).
  276. The null character cannot be handled properly for internal reasons (C
  277. strings!).  Everything following the null character will be ignored.
  278. newline will cause a line break.  It cannot be used as input.  Use
  279. >>>O_RETURN<<< instead.  The delete character 127 will be displayed
  280. \fB>>>CTRL_MARK<<<?\fP.
  281. .\"}}}
  282. .\"{{{  highbit-chars
  283. .LP
  284. .iX high-bit
  285. .iX hex
  286. .iX octal
  287. .iX ctrl-char
  288. .iX display
  289. Characters with set highbit can be displayed octal or hex, using command
  290. line option \fB\-d\fP\fImode\fP.  ctrl-chars can be displayed in the
  291. same way.
  292. .\"}}}
  293. .\"{{{  tabs + spaces
  294. .iX tab
  295. .iX space
  296. .iX display
  297. The tab character can be displayed in different ways (default is
  298. \fB\-t8\fP), depending on the chosen command line option:
  299. .bI "\fB\-t 0\fP:"
  300. Handle as normal control character.
  301. .Ib
  302. .bI "\fB\-t\fP \fIn\fP, \fIn\fP>0:"
  303. Display tab as whitespace.
  304. .Ib
  305. .LP
  306. Tabs are not allowed in front of fold lines or before indentation level of the
  307. current fold.
  308. .LP
  309. Spaces and tabs at end of line will be deleted when editing a line!
  310. Trailing spaces and tabs will only remain in the text, if the concerning
  311. lines are not changed and the lines are not inside indented folds.
  312. otherwise Origami strips all these characters on writing the file.
  313. .\"}}}
  314. .\"{{{  permission and viewmode
  315. .LP
  316. .iX view-mode
  317. If you do not have write permission for the specified file, Origami will
  318. enter view only mode.  Look at the manual page for advanced command
  319. line options.
  320. .\"}}}
  321. .\"{{{  directories
  322. .LP
  323. .iX directory
  324. .iX >>>MATCH_HIST<<<
  325. .iX >>>NO_MATCH_HIST<<<
  326. If the current file is a directory, Origami will use a list of filed
  327. folds for each directory entry as text.  Command line options \fB\-f\fP
  328. and \fB\-F\fP can be used, to control, which files will be shown.  The
  329. corresponding regular expressions can be changed, by changing the
  330. values in histories \fB>>>MATCH_HIST<<<\fP and \fB>>>NO_MATCH_HIST<<<\fP.
  331. The OCL variable \fB>>>DIRED_VAR<<<\fP can be set to non-zero, to
  332. get directory displays in long format.
  333. .\"}}}
  334. .\"}}}
  335. .\"{{{  The screen format
  336. .nH 2 "The Screen Format"
  337. .LP
  338. .iX screen
  339. .\"{{{  statusline
  340. .dX "status line"
  341. .iX language
  342. .iX modes
  343. On starting an Origami session, a status line appears near the bottom of
  344. the screen.  This line will probably remain throughout your edit session
  345. and any prompts or warnings issued by the editor will appear below this
  346. line. If you use multiple buffers you will see several other status lines,
  347. one for each open buffer. These status lines tell you which buffer is active
  348. (selected) and divide the windows into the buffers from each other.
  349. .\"{{{  modes in statusline
  350. .LP
  351. .iX >>>O_A_ECHO<<<
  352. If you started typing a key sequence bound to a command, this sequence
  353. will be displayed under the status line, as well.   If the second
  354. character of the line is a star, your file contains unsaved changes.
  355. The current language and the active modes are indicated in parentheses:
  356. .\"{{{  table of modes
  357. .dX >>>FOLD_TAG<<<
  358. .dX >>>sFOLD_TAG<<<
  359. .dX >>>DM_TAG<<<
  360. .dX >>>sDM_TAG<<<
  361. .dX >>>VIEW_TAG<<<
  362. .dX >>>sVIEW_TAG<<<
  363. .dX >>>OVER_TAG<<<
  364. .dX >>>sOVER_TAG<<<
  365. .dX >>>AUTO_TAG<<<
  366. .dX >>>sAUTO_TAG<<<
  367. .dX >>>NOPAR_TAG<<<
  368. .dX >>>sNOPAR_TAG<<<
  369. .dX >>>DV_TAG<<<
  370. .dX >>>sDV_TAG<<<
  371. .dX >>>BREGEXP_TAG<<<
  372. .dX >>>sBREGEXP_TAG<<<
  373. .dX >>>XREGEXP_TAG<<<
  374. .dX >>>sXREGEXP_TAG<<<
  375. .dX >>>H_SHIFT_TAG<<<
  376. .iX no-parse-mode
  377. .iX >>>O_CREATE_FOLD<<<
  378. .iX hash-shift-mode
  379. .iX view-mode
  380. .iX overwrite-mode
  381. .iX autosave-mode
  382. .iX no-parse-mode
  383. .iX directory
  384. .iX regular expression
  385. .nI
  386. .TS
  387. tab(|);
  388. l l l.
  389. long|short|meaning
  390. \fB>>>BREGEXP_TAG<<<\fP|\fB>>>sBREGEXP_TAG<<<\fP|basic regular expressions active
  391. \fB>>>XREGEXP_TAG<<<\fP|\fB>>>sXREGEXP_TAG<<<\fP|extended regular expressions active
  392. \fB>>>FOLD_TAG<<<\fP|\fB>>>sFOLD_TAG<<<\fP|creating a fold
  393. \fB>>>DM_TAG<<<\fP|\fB>>>sDM_TAG<<<\fP|defining a keyboard macro
  394. \fB>>>VIEW_TAG<<<\fP|\fB>>>sVIEW_TAG<<<\fP|Origami is in view only mode.
  395. \fB>>>OVER_TAG<<<\fP|\fB>>>sOVER_TAG<<<\fP|Origami is in overwrite mode.
  396. \fB>>>AUTO_TAG<<<\fP|\fB>>>sAUTO_TAG<<<\fP|Origami is in auto save mode.
  397. \fB>>>H_SHIFT_TAG<<<\fP|\fB>>>H_SHIFT_TAG<<<\fP|Origami is in hash shift mode
  398. \fB>>>NOPAR_TAG<<<\fP|\fB>>>sNOPAR_TAG<<<\fP|Origami is in no-parse mode.
  399. \fB>>>DV_TAG<<<\fP|\fB>>>sDV_TAG<<<\fP|Current file is a directory.
  400. .TE
  401. .In
  402. .\"}}}
  403. .LP
  404. .iX >>>O_A_POSI<<<
  405. .iX linelength
  406. If the position display mode is active (\fB>>>O_A_POSI<<<\fP), the
  407. current line and column is displayed in front of the filename.   The
  408. column is the screen coordinate, not the text coordinate.   Values
  409. greater than the linelength (>>>LINELEN<<<) are possible, if the current
  410. line contains characters, which are displayed with more than one
  411. character (tabs or control characters).
  412. .\"}}}
  413. .\"{{{  long status line
  414. .LP
  415. .iX "long status line"
  416. If the statusline is too long, the short forms are used and in language
  417. \fBUser\fP, only the first >>>SHORT_F_C_LENGTH<<< characters are shown
  418. (a cut string will be marked with a trailing \fB$\fP).   If required,
  419. Origami tries to cut the path and displays `\fB>>>CUT_PATH<<<\fP'
  420. instead of the omitted part of the path.
  421. .\"}}}
  422. .\"{{{  name
  423. .LP
  424. If there is a name defined in your keybinding file, it is displayed to the
  425. left of the version number
  426. (>>>MAJOR_VERSION<<<.>>>MINOR_VERSION<<<.>>>REVISION<<<) instead of
  427. `\fBOrigami\fP'.
  428. .\"}}}
  429. .\"{{{  -W
  430. .LP
  431. If Origami was started with command line option '\fB\-W\fP
  432. \fIstring\fP', \fIstring\fP will be displayed in front of the filename.
  433. .\"}}}
  434. .\"}}}
  435. .\"{{{  buffers
  436. .LP
  437. .dX buffer
  438. .dX "status line"
  439. .iX prompt
  440. Origami can edit more than one file at a time.  For this, the screen is
  441. split into windows.  Each of these windows displays one of the files
  442. being edited.  Each of the windows has a status line.  The active
  443. buffer has a normal statusline.  The other buffer show only filename and
  444. file-change-status.  If more than one buffer is used, each statusline
  445. starts with the number of the buffer.  Prompts and warnings still
  446. appear at the bottom of the screen.
  447. .\"}}}
  448. .\"{{{  prompts
  449. .LP
  450. .iX history
  451. .iX prompt
  452. .iX >>>FILE_HIST<<<
  453. .iX >>>SHELL_HIST<<<
  454. .iX >>>SEARCH_HIST<<<
  455. .iX >>>REPL_HIST<<<
  456. .iX >>>MISC_HIST<<<
  457. Various prompts have a history implemented, which can be used with the
  458. \fB>>>O_UP<<<\fP and \fB>>>O_DOWN<<<\fP commands.  These histories can
  459. take up to >>>HISTORY_MAX<<< lines, but Origami can reduce the size of
  460. this histories to >>>HISTORY_SIZE<<<, if the memory is needed.  There
  461. are different histories for commands concerning: shell, search,
  462. replace, files and miscellanous things.
  463. .\"{{{  allowed commands in prompts
  464. Inside prompts only a subset of Origami edit functions is allowed:
  465. .iX >>>O_LEFT<<<
  466. .iX >>>O_START_OF_LINE<<<
  467. .iX >>>O_RIGHT<<<
  468. .iX >>>O_END_OF_LINE<<<
  469. .iX >>>O_DELETE<<<
  470. .iX >>>O_RETURN<<<
  471. .iX >>>O_DOWN<<<
  472. .iX >>>O_UP<<<
  473. .iX >>>O_FILE_C<<<
  474. .iX >>>TEST_END_LINE<<<
  475. .iX >>>TEST_BEGIN_LINE<<<
  476. .iX >>>TEST_CHAR_SET<<<
  477. .iX >>>TEST_CHAR_LOW_C<<<
  478. .iX >>>TEST_CHAR_HIGH_C<<<
  479. .iX >>>TEST_CHAR_C<<<
  480. .iX >>>TEST_STR<<<
  481. .iX >>>STORE_CHAR<<<
  482. .iX >>>O_UNDEL_CHAR<<<
  483. .iX >>>O_TOGGLE_CASE<<<
  484. .TS
  485. l l.
  486. \fB>>>O_LEFT<<<\fP
  487. \fB>>>O_START_OF_LINE<<<\fP
  488. \fB>>>O_RIGHT<<<\fP
  489. \fB>>>O_END_OF_LINE<<<\fP
  490. \fB>>>O_DELETE<<<\fP
  491. \fB>>>O_UNDEL_CHAR<<<\fP
  492. \fB>>>O_FILE_C<<<\fP
  493. \fB>>>O_RETURN<<<\fP|end the input, current text is used
  494. any text characters
  495. \fB>>>O_UP<<<\fP
  496. \fB>>>O_DOWN<<<\fP
  497.  
  498. \fB>>>TEST_BEGIN_LINE<<<\fP
  499. \fB>>>TEST_END_LINE<<<\fP
  500. \fB>>>TEST_CHAR_SET<<<\fP
  501. \fB>>>TEST_CHAR_LOW_C<<<\fP
  502. \fB>>>TEST_CHAR_HIGH_C<<<\fP
  503. \fB>>>TEST_CHAR_C<<<\fP
  504. \fB>>>TEST_STR<<<\fP
  505. \fB>>>STORE_CHAR<<<\fP
  506. \fB>>>O_TOGGLE_CASE<<<\fP
  507. .TE
  508. .\"}}}
  509. .\"}}}
  510. .\"}}}
  511. .\"{{{  The special editor buffers
  512. .nH 2 "The Special Editor Buffers"
  513. .LP
  514. .dX "move buffer"
  515. .dX "kill buffer"
  516. .dX "pick buffer"
  517. .dX "delete buffer"
  518. .iX TDS
  519. There are three special buffers in Origami.  The `move buffer' contains
  520. one text line, the `kill buffer' in which several lines can be collected
  521. before inserting them back into the file, and the `delete buffer', which
  522. holds the last >>>UNDEL_LINES<<< deleted lines (in each case a line can be a closed
  523. fold, with all its contents).  The behaviour of these buffers in Origami
  524. is slightly different from TDS (INMOS Transputer Development System)
  525. \(em move, delete and kill buffers are lost on exit from Origami.  These
  526. buffers are neither displayed, nor do they have status lines.
  527. .nB
  528. the \fBkill-buffer\fP was named \fBpick-buffer\fP in TDS/Multitool and
  529. old versions of Origami.
  530. .\"}}}
  531. .\"{{{  Processing Origami files
  532. .nH 2 "Processing Origami Files"
  533. .LP
  534. .iX mark
  535. .iX comment
  536. .iX folding
  537. If a saved file is to pass through a particular compiler, the fold
  538. structure must be hidden from the compiler by writing it as comments.
  539. Origami hides the fold-markers by adding up to >>>FOLD_COMMENT_LENGTH<<<
  540. characters to the start and end of the fold-marker.  As comments differ
  541. from one language to another, it is necessary to choose the language
  542. before saving a new file for the first time.  When reading a file back
  543. into Origami the language type is retained.  As a consequence you should
  544. take care not to include compiler comments within the fold header, as this
  545. will lead to nested comments which are not allowed in some languages.
  546. .LP
  547. The general technique for hiding a fold is:
  548. .\"{{{  example
  549. .eX folding
  550. .eX comment
  551. .eX C
  552. .DS
  553. \&{\&{\&{  this is a fold
  554. \&.\&.\&.F  this is a filed fold for file xyz.a
  555. \&}\&}\&}
  556. .DE
  557. appears as
  558. .DS
  559. /*\&{\&{\&{  this is a fold*/
  560.   /*\&{\&{\&{F this is a filed fold for file xyz.a*/
  561.   /*\&:\&:\&:F xyz.a*/
  562.   /*\&}\&}\&}  */
  563. /*\&}\&}\&}  */
  564. .DE
  565. in the text file (language >>>LANG_C<<<).
  566. .LP
  567. Origami marks the used comment language with a special line.  This line
  568. will appear in front of the first fold or at end of file (unless
  569. language >>>LANG_None<<< is active):
  570. .DS
  571. /*\&{\&{\&{\&}\&}\&}*/
  572. .DE
  573. if language >>>LANG_C<<< is active.
  574. .\"}}}
  575. .LP
  576. Origami knows the following languages, to hide fold-markers:
  577. .\"{{{  table of values for comments
  578. .nI
  579. >>>LANG_LIST<<<
  580. .In
  581. .\"}}}
  582. .\"}}}
  583. .\"{{{  Inmos files
  584. .nH 2 ">>>LANG_Inmos<<< Files"
  585. .iX >>>LANG_Inmos<<<
  586. .iX transputer
  587. .iX TDS
  588. .LP
  589. The binary >>>LANG_Inmos<<< files can be edited without losing information.
  590. There are some restrictions on editing >>>LANG_Inmos<<< files:
  591. .sI "Lines are limited in length to >>>TDS_LEN<<<."
  592. .Is
  593. .bI "Filed folds:"
  594. Origami cannot open filed folds, only entering is possible.
  595. .LP
  596. Origami does not automatically remove files belonging to deleted filed
  597. folds and does not generate unique filenames on filing folds.
  598. .Ib
  599. .bI "\fBEXE\fP, \fBLIB\fP, .. :"
  600. Origami is not able to create special fold-types automatically, but can
  601. handle existing ones properly.  You can use a OCL-command to set
  602. fold-type and fold-contents within a function or macro to integer
  603. values.
  604. .Ib
  605. .bI ">>>LANG_Inmos<<< and ASCII-files:"
  606. Since version 1.6.31, the ASCII-format (using fold-languages \fBNONE\fP,
  607. \fBC\fP, .. ) for >>>LANG_Inmos<<< files has changed.  The differences concern only
  608. the additional fold attributes (like \fBEXE\fP, \fBSC\fP, .. ).  The new
  609. format should be able to save >>>LANG_Inmos<<< files with another language without
  610. loss of information, but we cannot guarantee this feature!  Check this
  611. in your environment, before using it widely.
  612. .LP
  613. Changing the language from >>>LANG_Inmos<<< to another one and writing the file
  614. only changes the current file.  Included filed-folds will not be
  615. changed by this!
  616. .Ib
  617. .bI ">>>LANG_Inmos<<< and trailing spaces or tabs"
  618. .iX space
  619. If language >>>LANG_Inmos<<< is used, all trailing spaces or tabs are removed while
  620. reading/writing files.
  621. .Ib
  622. .\"}}}
  623. .\"}}}
  624. .\"{{{  All Origami functions
  625. .nH 1 "All Origami functions"
  626. .LP
  627. .dX "origami functions"
  628. This chapter lists all Origami functions with their keybind names.  If
  629. you want to create a new keybinding, examine the files \fB???.keys\fP in
  630. the \fBbindings\fP directory of your Origami distribution.
  631. .\"{{{  moving around
  632. .nH 2 "Moving around"
  633. .\"{{{  >>>O_LEFT<<<
  634. .sI \fB>>>O_LEFT<<<\fP
  635. .Is
  636. .dX >>>O_LEFT<<<
  637. .\"}}}
  638. .\"{{{  >>>O_RIGHT<<<
  639. .sI \fB>>>O_RIGHT<<<\fP
  640. .Is
  641. .dX >>>O_RIGHT<<<
  642. .\"}}}
  643. .\"{{{  >>>O_UP<<<
  644. .sI \fB>>>O_UP<<<\fP
  645. .Is
  646. .dX >>>O_UP<<<
  647. .\"}}}
  648. .\"{{{  >>>O_DOWN<<<
  649. .sI \fB>>>O_DOWN<<<\fP
  650. .Is
  651. .dX >>>O_DOWN<<<
  652. .\"}}}
  653. .\"{{{  >>>O_START_OF_LINE<<<
  654. .sI \fB>>>O_START_OF_LINE<<<\fP
  655. .Is
  656. .dX >>>O_START_OF_LINE<<<
  657. .\"}}}
  658. .\"{{{  >>>O_END_OF_LINE<<<
  659. .sI \fB>>>O_END_OF_LINE<<<\fP
  660. .Is
  661. .dX >>>O_END_OF_LINE<<<
  662. .\"}}}
  663. .\"{{{  >>>O_PAGE_UP<<<
  664. .sI \fB>>>O_PAGE_UP<<<\fP
  665. .Is
  666. .dX >>>O_PAGE_UP<<<
  667. .\"}}}
  668. .\"{{{  >>>O_PAGE_DOWN<<<
  669. .sI \fB>>>O_PAGE_DOWN<<<\fP
  670. .Is
  671. .dX >>>O_PAGE_DOWN<<<
  672. .\"}}}
  673. .\"{{{  >>>O_TOP_OF_FOLD<<<
  674. .bI "\fB>>>O_TOP_OF_FOLD<<<\fP"
  675. .dX >>>O_TOP_OF_FOLD<<<
  676. Moves to the beginning of the entered fold.
  677. .Ib
  678. .\"}}}
  679. .\"{{{  >>>O_BOT_OF_FOLD<<<
  680. .bI "\fB>>>O_BOT_OF_FOLD<<<\fP"
  681. .dX >>>O_BOT_OF_FOLD<<<
  682. Moves to the end of the entered fold.
  683. .Ib
  684. .\"}}}
  685. .\"{{{  >>>O_GOTO_LINE<<<
  686. .bI "\fB>>>O_GOTO_LINE<<<\fP"
  687. .dX >>>O_GOTO_LINE<<<
  688. Prompts for a line number and moves the cursor to this line.  If needed,
  689. Origami opens closed folds to reach this line.
  690. .lC
  691. .Ib
  692. .\"}}}
  693. .\"}}}
  694. .\"{{{  folding
  695. .nH 2 "Folding"
  696. .iX folding
  697. .\"{{{  >>>O_OPEN_FOLD<<<
  698. .bI "\fB>>>O_OPEN_FOLD<<<\fP"
  699. .dX >>>O_OPEN_FOLD<<<
  700. Open fold and show the contents in the context of the current level.
  701. .wA
  702. .iX TDS
  703. unlike TDS, you can not open file folds, only entering them is allowed.
  704. .Ib
  705. .\"}}}
  706. .\"{{{  >>>O_CLOSE_FOLD<<<
  707. .bI "\fB>>>O_CLOSE_FOLD<<<\fP"
  708. .dX >>>O_CLOSE_FOLD<<<
  709. If the cursor is located within an opened fold, close this fold.
  710. .Ib
  711. .\"}}}
  712. .\"{{{  >>>O_ENTER_FOLD<<<
  713. .bI "\fB>>>O_ENTER_FOLD<<<\fP"
  714. .dX >>>O_ENTER_FOLD<<<
  715. Enter the fold at the current line.  That means, show only the contents
  716. of this fold such that this fold starts at indentation 0 - the First
  717. characters on each line are left at the extreme left of the logical
  718. window.    If the line is a normal fold the x position of the cursor is
  719. preserved.  This may mean that a long line upon which the cursor has been
  720. placed is scrolled out to the left.
  721. .LP
  722. Entering a filed fold saves the current file and switches to the new
  723. one.  The cursor is moved to the top left hand corner of
  724. the Logical window.  The old file and the line are stored internally.
  725. .eF "\fB>>>O_ENTER_FOLD<<<\fP"
  726. .LP
  727. .iX TDS
  728. Unlike TDS, using this function on normal text lines is allowed.
  729. Origami uses the string between the cursor position and the next single
  730. quote, double quote, whitespace or tab as filename.  If Origami cannot
  731. open the file, it will prompt for a filename (empty filename uses
  732. current file!).  The file will be entered as if there was a filed fold
  733. for it.
  734. .wA
  735. since version \fB1.6.85\fP, Origami tries to open
  736. \&'\fIdirname(current-file)/filename\fP', if the given filed-fold file
  737. cannot be found using the current working directory.
  738. .Ib
  739. .\"}}}
  740. .\"{{{  >>>O_EXIT_FOLD<<<
  741. .bI "\fB>>>O_EXIT_FOLD<<<\fP"
  742. .dX >>>O_EXIT_FOLD<<<
  743. Exit fold. Show the entered fold as closed fold and the surrounding text
  744. again.
  745. .LP
  746. Exiting a filed fold saves the file, if required.
  747. .LP
  748. .iX "editor files"
  749. Using this function, without having entered a fold, will edit a list of
  750. all command line files and edited files shown as folds.  The cursor is
  751. moved to the line, containing the entry for the current file.
  752. .Ib
  753. .\"}}}
  754. .\"{{{  >>>O_REMOVE_FOLD<<<
  755. .bI "\fB>>>O_REMOVE_FOLD<<<\fP"
  756. .dX >>>O_REMOVE_FOLD<<<
  757. Remove fold at the current line \(em deletes the fold structure and
  758. inserts the contents of the fold instead.
  759. .Ib
  760. .\"}}}
  761. .\"{{{  >>>O_CREATE_FOLD<<<
  762. .bI "\fB>>>O_CREATE_FOLD<<<\fP"
  763. .dX >>>O_CREATE_FOLD<<<
  764. .iX >>>M_O_VAR<<<
  765. Create fold.  Use twice \(em first to indicate the top of a new fold,
  766. then to indicate its bottom.  Lines to be included within the fold must
  767. not be indented less than the fold itself.  Tabs are not allowed at the
  768. beginning of the folded lines if they appear before the intended
  769. indentation of the fold.  Several other keys are disabled while
  770. >>>O_CREATE_FOLD<<< is active.  The part of the text, which would be
  771. highlighted, is displayed inverse.
  772. .LP
  773. The OCL variable \fB>>>M_O_VAR<<<\fP can be used to modify the semantics of
  774. \fB>>>O_CREATE_FOLD<<<\fP:
  775. .bI "\fB>>>M_O_VAR<<<\fP=\fB0\fP"
  776. Normal folding, as described above.
  777. .Ib
  778. .bI "\fB>>>M_O_VAR<<<\fP=\fB1\fP"
  779. Do not fold, but highlight the text, as if folding. Keys, not allowed
  780. during folding, are also disabled here.
  781. .Ib
  782. .bI "\fB>>>M_O_VAR<<<\fP=\fB2\fP"
  783. Do not fold, but highlight all text between calling position for
  784. \fB>>>O_CREATE_FOLD<<<\fP and cursor position.  Keys, not allowed during
  785. folding, are also disabled here.
  786. .Ib
  787. .bI "\fB>>>M_O_VAR<<<\fP=\fB3\fP"
  788. Do not fold, but highlight a rectangle text block between calling
  789. position for \fB>>>O_CREATE_FOLD<<<\fP and cursor position.  Keys, not allowed
  790. during folding, are also disabled here.
  791. .Ib
  792. .bI "\fB>>>M_O_VAR<<<\fP=\fB4\fP"
  793. Do not fold, set highlighting mode but do not highlight anything.  Keys,
  794. not allowed during folding, are also disabled here.
  795. .Ib
  796. .bI "\fB>>>M_O_VAR<<<\fP=\fB5\fP"
  797. Like default \fB>>>O_CREATE_FOLD<<<\fP (\fB>>>M_O_VAR<<<\fP=\fB0\fP),
  798. but do not highlight anything.
  799. .Ib
  800. .bI "\fB>>>M_O_VAR<<<\fP=\fB\-\fP\fIx\fP, \fB1\fP<=\fIx\fP<=\fB4\fP"
  801. Like \fB>>>M_O_VAR<<<\fP=\fIx\fP, but the command restrictions are weaker.  The
  802. additional allowed commands are slowed down by the screen handling
  803. routines.
  804. .Ib
  805. .bI "other values"
  806. The behaviour is undefined.
  807. .Ib
  808. .nB
  809. the value of \fB>>>M_O_VAR<<<\fP for the second \fB>>>O_CREATE_FOLD<<<\fP call is
  810. ignored!
  811. .Ib
  812. .\"}}}
  813. .\"{{{  >>>O_FIRST_LINE_TO_FOLD_H<<<
  814. .bI "\fB>>>O_FIRST_LINE_TO_FOLD_H<<<\fP"
  815. .dX >>>O_FIRST_LINE_TO_FOLD_H<<<
  816. When the cursor is on a opened/closed fold this key will copy the first
  817. line enclosed by that fold to the fold line.
  818. .Ib
  819. .\"}}}
  820. .\"{{{  >>>O_FILE_FOLD<<<
  821. .bI "\fB>>>O_FILE_FOLD<<<\fP"
  822. .dX >>>O_FILE_FOLD<<<
  823. File (create a new file) or unfile a fold.  Creating a file writes the
  824. contents of the fold into a new file named by the fold comment (up to
  825. the first whitespace or tab).  Unlike TDS, Origami does not create a new
  826. filename if the chosen one is already used.  It does not matter if you
  827. change the fold comment after filing a fold, because the filename is
  828. stored internally.  Unfiling a filed fold replaces the file link with
  829. the contents of the file itself.
  830. .LP
  831. .iX TDS
  832. Unlike TDS Origami does not remove the original file included this way.
  833. .Ib
  834. .\"}}}
  835. .\"{{{  >>>O_ATTACH_FILE<<<
  836. .bI "\fB>>>O_ATTACH_FILE<<<\fP"
  837. .dX >>>O_ATTACH_FILE<<<
  838. Attach a file to a fold.  This function links an existing file rather
  839. than creating a new one (and thus differs from toggle-create-file-fold).
  840. The filename is taken from the comment of the empty fold the cursor is
  841. placed on.  The filename starts behind the foldmark and ends at the
  842. first whitespace or tab.  The rest of the line is ignored.  After
  843. attaching files you can change the fold header because the file
  844. information is stored internally.
  845. .LP
  846. If the cursor is on a filed fold line, the file will be detached from
  847. the fold.
  848. .wA
  849. detaching a file may loose the information about the filename.  Fold
  850. comment and filename may differ!  Type and contents of the fold will be
  851. reset to the default values!
  852. .wA
  853. since version \fB1.6.85\fP, Origami tries to attach
  854. \&'\fIdirname(current-file)/filename\fP', if the given file cannot be
  855. found using the current working directory.  In this case, the filename
  856. will also be changed in the fold comment!
  857. .Ib
  858. .\"}}}
  859. .\"}}}
  860. .\"{{{  editing
  861. .nH 2 "Editing"
  862. .\"{{{  >>>O_DEL_LINE<<<
  863. .bI "\fB>>>O_DEL_LINE<<<\fP"
  864. .dX >>>O_DEL_LINE<<<
  865. Deletes the current line, pushing it onto the delete buffer.
  866. The delete buffer is a stack with depth >>>UNDEL_LINES<<< lines.
  867. .Ib
  868. .\"}}}
  869. .\"{{{  >>>O_UNDEL_LINE<<<
  870. .bI "\fB>>>O_UNDEL_LINE<<<\fP"
  871. .dX >>>O_UNDEL_LINE<<<
  872. Pop a line from the delete buffer and paste it into the current file
  873. above the current line.  The delete buffer is a stack with depth
  874. >>>UNDEL_LINES<<< lines.
  875. .Ib
  876. .\"}}}
  877. .\"{{{  >>>O_DELETE<<<
  878. .bI "\fB>>>O_DELETE<<<\fP"
  879. .dX >>>O_DELETE<<<
  880. Deletes the character to the left of the cursor.  If the cursor was at
  881. the left margin, this line will be appended to the previous line.
  882. .Ib
  883. .\"}}}
  884. .\"{{{  >>>O_UNDEL_CHAR<<<
  885. .bI "\fB>>>O_UNDEL_CHAR<<<\fP"
  886. .dX >>>O_UNDEL_CHAR<<<
  887. Undeletes the last deleted character.  This stored character is only
  888. changed by the \fB>>>O_DELETE<<<\fP command.
  889. .Ib
  890. .\"}}}
  891. .\"{{{  >>>O_TOGGLE_CASE<<<
  892. .bI "\fB>>>O_TOGGLE_CASE<<<\fP"
  893. .dX >>>O_TOGGLE_CASE<<<
  894. Changes the case of the character under the cursor.
  895. .Ib
  896. .\"}}}
  897. .\"{{{  >>>O_RETURN<<<
  898. .bI "\fB>>>O_RETURN<<<\fP"
  899. .dX >>>O_RETURN<<<
  900. Opens the line at cursor position and indents the right part like the
  901. left part.
  902. .Ib
  903. .\"}}}
  904. .\"{{{  >>>O_PICK<<<
  905. .bI "\fB>>>O_PICK<<<\fP"
  906. .dX >>>O_PICK<<<
  907. .iX TDS
  908. Removes a line from the file and adds it to the end of the kill buffer.
  909. Note that the `kill buffer' is lost when exiting Origami, unlike TDS.
  910. .Ib
  911. .\"}}}
  912. .\"{{{  >>>O_COPY_PICK<<<
  913. .bI "\fB>>>O_COPY_PICK<<<\fP"
  914. .dX >>>O_COPY_PICK<<<
  915. .iX TDS
  916. Copies a line to the end of the kill buffer without deleting it from the
  917. file.  Note that the kill buffer is lost when exiting Origami, unlike
  918. TDS.  Lines containing filed folds cannot be copied to the kill buffer,
  919. while language \fB>>>LANG_Inmos<<<\fP is active.
  920. .Ib
  921. .\"}}}
  922. .\"{{{  >>>O_PUT_PICK<<<
  923. .bI "\fB>>>O_PUT_PICK<<<\fP"
  924. .dX >>>O_PUT_PICK<<<
  925. Places the kill buffer before the current line as a fold with no
  926. comment.
  927. .Ib
  928. .\"}}}
  929. .\"{{{  >>>O_MOVE<<<
  930. .bI "\fB>>>O_MOVE<<<\fP"
  931. .dX >>>O_MOVE<<<
  932. If the move buffer is empty, the current line is moved to the move
  933. buffer.  Otherwise the move buffer is inserted before the current line.
  934. Note that the move buffer is lost when exiting Origami, unlike TDS.
  935. .Ib
  936. .\"}}}
  937. .\"{{{  >>>O_COPY<<<
  938. .bI "\fB>>>O_COPY<<<\fP"
  939. .dX >>>O_COPY<<<
  940. Duplicates the current line in the file.  Lines containing filed folds
  941. cannot be duplicated, while language \fB>>>LANG_Inmos<<<\fP is active.
  942. .Ib
  943. .\"}}}
  944. .\"{{{  >>>O_FILTER_LINE<<<
  945. .bI "\fB>>>O_FILTER_LINE<<<\fP"
  946. .dX >>>O_FILTER_LINE<<<
  947. Pipes the current line through a filter.  If the current line is a
  948. closed fold, the contents of this fold is filtered.  If the current line
  949. is a normal text line, this text will be filtered.  This command has no
  950. effect on any other sort of line, other than to report its failure with
  951. a message.  The standard output of the filter will be inserted at the
  952. position of the line.  The line itself will be deleted.  The text read
  953. from the filter will be parsed for folds as expected.
  954. .sS \fB>>>O_FILTER_LINE<<<\fP
  955. .Ib
  956. .\"}}}
  957. .\"}}}
  958. .\"{{{  search & replace
  959. .nH 2 "Search and replace"
  960. .\"{{{  >>>O_FIND<<<
  961. .bI "\fB>>>O_FIND<<<\fP"
  962. .dX >>>O_FIND<<<
  963. Prompts for a search string and moves the cursor to the next occurance.  The
  964. pattern is searched in the currently entered fold.
  965. .Ib
  966. .\"}}}
  967. .\"{{{  >>>O_FIND_REVERSE<<<
  968. .bI "\fB>>>O_FIND_REVERSE<<<\fP"
  969. .dX >>>O_FIND_REVERSE<<<
  970. Same as \fB>>>O_FIND<<<\fP, but searches backward.
  971. .Ib
  972. .\"}}}
  973. .\"{{{  >>>O_REPLACE<<<
  974. .bI "\fB>>>O_REPLACE<<<\fP"
  975. .dX >>>O_REPLACE<<<
  976. Asks for a search and a replace string and replaces all occurances of the search string
  977. with the replace string.  The replace will be done in the currently entered fold.
  978. .Ib
  979. .\"}}}
  980. .\"{{{  >>>O_QUERY_REPLACE<<<
  981. .bI "\fB>>>O_QUERY_REPLACE<<<\fP"
  982. .dX >>>O_QUERY_REPLACE<<<
  983. Same as \fB>>>O_REPLACE<<<\fP, but asks before replacing.
  984. .Ib
  985. .\"}}}
  986. .\"{{{  >>>O_ITS_SEARCH<<<
  987. .bI "\fB>>>O_ITS_SEARCH<<<\fP"
  988. .dX >>>O_ITS_SEARCH<<<
  989. .iX >>>O_RETURN<<<
  990. .iX >>>O_UP<<<
  991. .iX >>>O_LEFT<<<
  992. .iX >>>O_ITS_REVERSE<<<
  993. .iX >>>O_FIND_REVERSE<<<
  994. .iX >>>O_DOWN<<<
  995. .iX >>>O_DELETE<<<
  996. .iX >>>O_RIGHT<<<
  997. .iX incremental-search
  998. .iX >>>O_FIND<<<
  999. Searches the text for a string.  String can be entered incrementally.
  1000. \fB>>>O_DELETE<<<\fP jumps to the position where the character was added
  1001. to the search string.  Adding a character tries to find the new string.
  1002. Aborting this command jumps to the calling position.  \fB>>>O_RETURN<<<\fP
  1003. ends the search.  \fB>>>O_LEFT<<<\fP, \fB>>>O_ITS_REVERSE<<<\fP and
  1004. \fB>>>O_FIND_REVERSE<<<\fP switch the search direction to backwards and
  1005. search the string.  \fB>>>O_RIGHT<<<\fP, \fB>>>O_ITS_SEARCH<<<\fP and
  1006. \fB>>>O_FIND<<<\fP switch the search direction to forward and search the
  1007. string.  \fB>>>O_UP<<<\fP and \fB>>>O_DOWN<<<\fP walk through the search
  1008. history to get other patterns.  The pattern is searched in the currently
  1009. entered fold.
  1010. .LP
  1011. Using \fB>>>O_LEFT<<<\fP, \fB>>>O_ITS_REVERSE<<<\fP, \fB>>>O_FIND_REVERSE<<<\fP,
  1012. \fB>>>O_DOWN<<<\fP, \fB>>>O_RIGHT<<<\fP, \fB>>>O_ITS_SEARCH<<<\fP,
  1013. \fB>>>O_FIND<<<\fP or \fB>>>O_DELETE<<<\fP as first input inside the
  1014. incremental search initializes the search pattern with the last used
  1015. pattern.  \fB>>>O_ITS_SEARCH<<<\fP uses \fB>>>O_GOTO_LINE<<<\fP to reach the
  1016. search position if it is not already on the screen.
  1017. .nB
  1018. .iX regular expression
  1019. while basic or extended regular expression search is active and the
  1020. given string is not a valid expression, the cursor will not moved, until
  1021. the string is a valid regular expression! Origami uses the same position
  1022. stack mechanism as without regular expression search.
  1023. .Ib
  1024. .\"}}}
  1025. .\"{{{  >>>O_ITS_REVERSE<<<
  1026. .bI "\fB>>>O_ITS_REVERSE<<<\fP"
  1027. .dX >>>O_ITS_REVERSE<<<
  1028. Same as \fB>>>O_ITS_SEARCH<<<\fP, but starts with search direction
  1029. backwards.
  1030. .Ib
  1031. .\"}}}
  1032. .wA
  1033. Searching reverse is slower then searching forward!  Multiple calls of the
  1034. pattern matching algorithm are neccessary, to find a match in front of
  1035. the cursor position!
  1036. .\"}}}
  1037. .\"{{{  files
  1038. .nH 2 "Files"
  1039. .\"{{{  >>>O_OPEN_NEW_FILE<<<
  1040. .bI "\fB>>>O_OPEN_NEW_FILE<<<\fP"
  1041. .dX >>>O_OPEN_NEW_FILE<<<
  1042. Reads another file for editing, saving the current one if required.  If
  1043. no filename is given, the current file is reread.
  1044. .eF "\fB>>>O_OPEN_NEW_FILE<<<\fP"
  1045. .Ib
  1046. .\"}}}
  1047. .\"{{{  >>>O_OPEN_BUFFER<<<
  1048. .bI "\fB>>>O_OPEN_BUFFER<<<\fP"
  1049. .dX >>>O_OPEN_BUFFER<<<
  1050. .iX buffer
  1051. Split the current window and prompt for the file, to be edited in the new
  1052. buffer. The new buffer will be opened below the old buffer.
  1053. .LP
  1054. .iX >>>M_O_VAR<<<
  1055. If OCL variable \fB>>>M_O_VAR<<<\fP is not 0, the new buffer will be
  1056. opened:
  1057. .\"{{{  1=above
  1058. .bI "\fB>>>M_O_VAR<<<\fP=\fB1\fP"
  1059. open above the current buffer
  1060. .Ib
  1061. .\"}}}
  1062. .\"{{{  -1=above and devnull
  1063. .bI "\fB>>>M_O_VAR<<<\fP=\fB\-1\fP"
  1064. open above the current buffer
  1065. .br
  1066. do not ask for a file but open \fB/dev/null\fP
  1067. .Ib
  1068. .\"}}}
  1069. .\"{{{  -2=devnull
  1070. .bI "\fB>>>M_O_VAR<<<\fP=\fB\-2\fP"
  1071. do not ask for a file but open \fB/dev/null\fP
  1072. .Ib
  1073. .\"}}}
  1074. .eF "\fB>>>O_OPEN_BUFFER<<<\fP"
  1075. .Ib
  1076. .\"}}}
  1077. .\"{{{  >>>O_OPEN_W_BUFFER<<<
  1078. .bI "\fB>>>O_OPEN_W_BUFFER<<<\fP"
  1079. .dX >>>O_OPEN_W_BUFFER<<<
  1080. .iX buffer
  1081. Split the current window into two adjacent windows and prompt for the
  1082. file, to be edited in the new buffer.  The new buffer will be opened to
  1083. the right of the old buffer.
  1084. .LP
  1085. .iX >>>M_O_VAR<<<
  1086. If OCL variable \fB>>>M_O_VAR<<<\fP is not 0, the new buffer will be opened to the
  1087. left of the old buffer.
  1088. .eF "\fB>>>O_OPEN_W_BUFFER<<<\fP"
  1089. .Ib
  1090. .\"}}}
  1091. .\"{{{  >>>O_OPEN_LIST_FILE<<<
  1092. .bI "\fB>>>O_OPEN_LIST_FILE<<<\fP"
  1093. .dX >>>O_OPEN_LIST_FILE<<<
  1094. Reads another file from list of edited files for editing, saving the
  1095. current one if required. If the given number to low (high),
  1096. \fB>>>O_OPEN_LIST_FILE<<<\fP uses the last (first) file in the list.
  1097. \fB>>>O_OPEN_LIST_FILE<<<\fP tries to reach the same line, you were the
  1098. last time, you edited this file.
  1099. .LP
  1100. .iX >>>M_B_VAR<<<
  1101. If OCL variable \fB>>>M_B_VAR<<<\fP is set to not null,
  1102. \fB>>>O_OPEN_LIST_FILE<<<\fP will not ask for the number and use the
  1103. value \fB\-( >>>M_B_VAR<<< 1)\fP.
  1104. .Ib
  1105. .\"}}}
  1106. .\"{{{  >>>O_OPEN_LIST_BUFFER<<<
  1107. .bI "\fB>>>O_OPEN_LIST_BUFFER<<<\fP"
  1108. .dX >>>O_OPEN_LIST_BUFFER<<<
  1109. .iX buffer
  1110. Split the current window and prompt for the file number to be edited in the
  1111. new buffer, which will be opened below the current buffer.
  1112. .LP
  1113. .iX >>>M_O_VAR<<<
  1114. If OCL variable \fB>>>M_O_VAR<<<\fP is not 0, the new buffer will be opened above the old
  1115. buffer.
  1116. .Ib
  1117. .\"}}}
  1118. .\"{{{  >>>O_OPEN_LIST_W_BUFFER<<<
  1119. .bI "\fB>>>O_OPEN_LIST_W_BUFFER<<<\fP"
  1120. .dX >>>O_OPEN_LIST_W_BUFFER<<<
  1121. .iX buffer
  1122. Split the current window into two adjacent windows  and prompt for the
  1123. file number to be edited in the new buffer.
  1124. .LP
  1125. .iX >>>M_O_VAR<<<
  1126. If OCL variable \fB>>>M_O_VAR<<<\fP is not 0, the new buffer will be opened to the
  1127. left of the old buffer.
  1128. .Ib
  1129. .\"}}}
  1130. .\"{{{  >>>O_ENTER_NO_FILE<<<
  1131. .bI "\fB>>>O_ENTER_NO_FILE<<<\fP"
  1132. .dX >>>O_ENTER_NO_FILE<<<
  1133. Like \fB>>>O_ENTER_FOLD<<<\fP, but prompts for a number and enters the given
  1134. file from list of edited files.
  1135. .Ib
  1136. .\"}}}
  1137. .\"{{{  >>>O_SAVE_FILE<<<
  1138. .bI "\fB>>>O_SAVE_FILE<<<\fP"
  1139. .dX >>>O_SAVE_FILE<<<
  1140. Saves the current file with the current name and language.  This command
  1141. will only succeed if you have not entered a fold.
  1142. .nB
  1143. if Origami is in view mode, the file will not be saved, even if it was
  1144. changed.
  1145. .Ib
  1146. .\"}}}
  1147. .\"{{{  >>>O_WRITE_FILE<<<
  1148. .bI "\fB>>>O_WRITE_FILE<<<\fP"
  1149. .dX >>>O_WRITE_FILE<<<
  1150. Prompts for a filename and listing-mode.  If no filename is given, the
  1151. current filename will be used.  Origami writes the text to a new file
  1152. using the current language.  If listing-mode is set, the generated file
  1153. will be modified in the following way:
  1154. .iX comment
  1155. .iX mark
  1156. .DS
  1157. no heading \fIcomment\fP \fB{\&{\&{}\&}\&}\fP \fIcomment\fP line
  1158. no \fB{\&{\&{\fP in fold headers
  1159. no \fIcomment\fP \fB}\&}\&}\fP \fIcomment\fP lines
  1160. .DE
  1161. If listing-mode is set, the fold structure in the written file is lost.
  1162. While using the language \fB>>>LANG_Inmos<<<\fP it is impossible to set
  1163. listing-mode, because the the generated files have an incompatible
  1164. structure.
  1165. .Ib
  1166. .\"}}}
  1167. .\"{{{  >>>O_RENAME_FILE<<<
  1168. .bI "\fB>>>O_RENAME_FILE<<<\fP"
  1169. .dX >>>O_RENAME_FILE<<<
  1170. Prompts for a new name for the current file.  It will not ask for
  1171. permission, if the current file has been changed.  The file-change mode will
  1172. not be changed.  The stack of entered file folds is only changed for the
  1173. current file.
  1174. .Ib
  1175. .\"}}}
  1176. .\"{{{  >>>O_INSERT_FILE<<<
  1177. .bI "\fB>>>O_INSERT_FILE<<<\fP"
  1178. .dX >>>O_INSERT_FILE<<<
  1179. Insert File.  Prompts for a filename and imports this file into the
  1180. edited file at the current position.  If no filename is given, the
  1181. current filename is used.
  1182. .Ib
  1183. .\"}}}
  1184. .\"{{{  >>>O_FILTER_BUFFER<<<
  1185. .bI "\fB>>>O_FILTER_BUFFER<<<\fP"
  1186. .dX >>>O_FILTER_BUFFER<<<
  1187. Filters the current text.  Origami prompts for the name of a filter.
  1188. Origami tries to move the cursor back to the line on which the cursor
  1189. was placed before executing this command.  Entered folds will be left
  1190. before filtering!
  1191. .sS \fB>>>O_FILTER_BUFFER<<<\fP
  1192. .Ib
  1193. .\"}}}
  1194. .\"{{{  >>>O_PIPE_FROM_COMMAND<<<
  1195. .bI "\fB>>>O_PIPE_FROM_COMMAND<<<\fP"
  1196. .dX >>>O_PIPE_FROM_COMMAND<<<
  1197. Prompts for a command.  The command is executed and its standard output
  1198. inserted in the text at current position.
  1199. .sS \fB>>>O_PIPE_FROM_COMMAND<<<\fP
  1200. .Ib
  1201. .\"}}}
  1202. .\"{{{  >>>O_PIPE_TO_COMMAND<<<
  1203. .bI "\fB>>>O_PIPE_TO_COMMAND<<<\fP"
  1204. .dX >>>O_PIPE_TO_COMMAND<<<
  1205. Prompts for a command.  The current file will be piped to this command
  1206. as standard input.
  1207. .sS \fB>>>O_PIPE_TO_COMMAND<<<\fP
  1208. .Ib
  1209. .\"}}}
  1210. .\"}}}
  1211. .\"{{{  macros
  1212. .nH 2 "Macros"
  1213. .\"{{{  >>>O_DEF_MACRO<<<
  1214. .bI "\fB>>>O_DEF_MACRO<<<\fP"
  1215. .dX >>>O_DEF_MACRO<<<
  1216. .iX macro
  1217. Records all keys in the keyboard macro buffer until >>>O_DEF_MACRO<<< is
  1218. pressed again.  Calling user defined functions is also allowed during
  1219. >>>O_DEF_MACRO<<<.  \fB>>>O_DEF_MACRO<<<\fP cannot be executed while Origami prompts
  1220. for information for another function (like \fB>>>O_OPEN_NEW_FILE<<<\fP).  Origami
  1221. can store up to >>>MAX_MACRO_LENGTH<<< keys.
  1222. .Ib
  1223. .\"}}}
  1224. .\"{{{  >>>O_EXE_MACRO<<<
  1225. .bI "\fB>>>O_EXE_MACRO<<<\fP"
  1226. .dX >>>O_EXE_MACRO<<<
  1227. Call keyboard macro.
  1228. .Ib
  1229. .\"}}}
  1230. .\"{{{  >>>O_DEF_FIX<<<
  1231. .bI "\fB>>>O_DEF_FIX<<<\fP"
  1232. .dX >>>O_DEF_FIX<<<
  1233. Asks for the number of a fix macro buffer.  The contents of the keyboard
  1234. macro buffer is copied to this fix macro buffer.  Using \fB(>>>DEFMACRO<<< \&..
  1235. )\fP in keybind makes it impossible to overwrite the fix buffer.  Using
  1236. \fB\&(>>>DEFMYFIX<<<\fP \fIx\fP\fB)\fP in your OCL source places \fIx\fP
  1237. free macro buffers at places 1..\fIx\fP.
  1238. .Ib
  1239. .\"}}}
  1240. .\"{{{  >>>O_CALL_FIX<<< n
  1241. .bI "\fB>>>O_CALL_FIX<<<\fP \fIn\fP, (\fIn\fP=1,2,..)"
  1242. .dX >>>O_CALL_FIX<<<
  1243. Execute fix-macro number \fIn\fP.  This command should be used to call
  1244. macros defined by \fB>>>O_DEF_FIX<<<\fP.  All other macro buffers
  1245. are used by \fB(>>>DEFMACRO<<<\fP \fIfoo\fP \fB(...) )\fP and \fB(>>>KEYDEF<<<\fP
  1246. \fIfoo\fP \fB(...) )\fP in keybind, so that using these operations has
  1247. the same effect as calling the function/macro keysequence by their name!
  1248. .Ib
  1249. .\"}}}
  1250. .\"}}}
  1251. .\"{{{  shell commands
  1252. .nH 2 "Shell commands"
  1253. .\"{{{  >>>O_SHELL<<<
  1254. .bI "\fB>>>O_SHELL<<<\fP"
  1255. .dX >>>O_SHELL<<<
  1256. .iX >>>SHELL<<<
  1257. Creates a shell according.  Exiting from this shell will return to
  1258. Origami.
  1259. .sS \fB>>>O_SHELL<<<\fP
  1260. .Ib
  1261. .\"}}}
  1262. .\"{{{  >>>O_SHELL_COMMAND<<<
  1263. .bI "\fB>>>O_SHELL_COMMAND<<<\fP"
  1264. .dX >>>O_SHELL_COMMAND<<<
  1265. Prompts for a command and starts a shell which executes it.
  1266. .sS \fB>>>O_SHELL_COMMAND<<<\fP
  1267. .Ib
  1268. .\"}}}
  1269. .\"{{{  >>>O_SUSPEND<<<
  1270. .bI "\fB>>>O_SUSPEND<<<\fP"
  1271. .dX >>>O_SUSPEND<<<
  1272. If your system has job control, Origami will be suspended and the calling
  1273. shell is reactivated.
  1274. .nB
  1275. \fB>>>O_SUSPEND<<<\fP is disabled, if command line option \fB\-Z\fP is
  1276. used or the stop signal is disabled by stty.
  1277. .Ib
  1278. .\"}}}
  1279. .\"}}}
  1280. .\"{{{  arguments
  1281. .nH 2 "Arguments"
  1282. .LP
  1283. .iX argument
  1284. Like in Emacs, you can repeat each command by using an numerical
  1285. argument.  The first digit is given by \fBset-argument-\fP\fIdigit\fP.
  1286. These functions read more digits of the argument until you type a non
  1287. digit.  This non digit may be a key sequence bound to a command or just
  1288. a single character.  It will be repeated argument times.  Pressing the
  1289. abort key will abort the repeated execution.  \fBset-argument \fP\fIx\fP
  1290. stops the definition or execution of a keyboard macro!
  1291. .dX set-argument
  1292. .sI "\fB>>>O_REP_0<<<\fP ... \fB>>>O_REP_9<<<\fP"
  1293. .Is
  1294. .LP
  1295. If the argument is set to 0, the command will be executed once.
  1296. .\"}}}
  1297. .\"{{{  special functions
  1298. .nH 2 "Special functions"
  1299. .\"{{{  >>>O_FILE_C<<<
  1300. .bI "\fB>>>O_FILE_C<<<\fP"
  1301. .dX >>>O_FILE_C<<<
  1302. .iX >>>OCL_ARG_V<<<
  1303. If the cursor stands on a whitespace or tab, Origami tries to complete
  1304. the word left from the cursor as filename.  If the given word starts
  1305. with a \fB~\fP and does not contain any path-separator, Origami tries to
  1306. complete the user name.  The OCL variable \fB>>>OCL_ARG_V<<<\fP is set
  1307. to the number of added characters.  If the extended filename belongs to
  1308. a directory, a \fB/\fP will also be appended.
  1309. .Ib
  1310. .\"}}}
  1311. .\"{{{  >>>K_QUOTE<<<
  1312. .bI "\fB>>>K_QUOTE<<<\fP"
  1313. .dX >>>K_QUOTE<<<
  1314. The next character typed in will be inserted in your text, even if it is
  1315. bound to a command.
  1316. .Ib
  1317. .\"}}}
  1318. .\"{{{  >>>O_FLUSH<<<
  1319. .bI "\fB>>>O_FLUSH<<<\fP"
  1320. .dX >>>O_FLUSH<<<
  1321. Refresh the screen (after using \fB>>>SCROFF<<<\fP).
  1322. .Ib
  1323. .\"}}}
  1324. .\"{{{  >>>O_REFRESH<<<
  1325. .bI "\fB>>>O_REFRESH<<<\fP"
  1326. .dX >>>O_REFRESH<<<
  1327. Refresh and center screen.  Like \fB>>>O_FLUSH<<<\fP, but also resets
  1328. the window size.  If you are working with a window environment which
  1329. does not send a window changed signal, you may use this command after
  1330. resizing a window.
  1331. .LP
  1332. .iX >>>M_O_VAR<<<
  1333. If OCL variable \fB>>>M_O_VAR<<<\fP is set to \fB0\fP, the whole screen will be
  1334. drawn (useful if the screen was messed up by messages...), otherwise
  1335. only the changes will be written.
  1336. .Ib
  1337. .\"}}}
  1338. .\"{{{  >>>O_GROW_BUFFER<<<
  1339. .bI \fB>>>O_GROW_BUFFER<<<\fP
  1340. .dX >>>O_GROW_BUFFER<<<
  1341. .iX buffer
  1342. Increase the height of the current buffer by 1.
  1343. .Ib
  1344. .\"}}}
  1345. .\"{{{  >>>O_SHRINK_BUFFER<<<
  1346. .bI \fB>>>O_SHRINK_BUFFER<<<\fP
  1347. .dX >>>O_SHRINK_BUFFER<<<
  1348. .iX buffer
  1349. Decrease the height of the current buffer by 1.  If \fB>>>O_OPEN_BUFFER<<<\fP or
  1350. If there are no (visible or invisible) height divisions the height of
  1351. the used part of the screen will be reduced.  This is only done, while
  1352. the current buffer uses more than >>>TXT_MIN_H<<< lines.
  1353. .Ib
  1354. .\"}}}
  1355. .\"{{{  >>>O_GROW_W_BUFFER<<<
  1356. .bI \fB>>>O_GROW_W_BUFFER<<<\fP
  1357. .dX >>>O_GROW_W_BUFFER<<<
  1358. .iX buffer
  1359. Increase the width of the current buffer by 1.
  1360. .Ib
  1361. .\"}}}
  1362. .\"{{{  >>>O_SHRINK_W_BUFFER<<<
  1363. .bI \fB>>>O_SHRINK_W_BUFFER<<<\fP
  1364. .dX >>>O_SHRINK_W_BUFFER<<<
  1365. .iX buffer
  1366. if Several buffers are present decrease the width of the buffer by 1.
  1367. If there are no (visible or invisible) width divisions, the width of the used
  1368. part of the screen is reduced.  This is only done, if the current buffer
  1369. uses more than >>>TXT_MIN_W<<< columns.
  1370. .Ib
  1371. .\"}}}
  1372. .\"{{{  >>>O_DESCRIBE_BINDINGS<<<
  1373. .bI "\fB>>>O_DESCRIBE_BINDINGS<<<\fP"
  1374. .dX >>>O_DESCRIBE_BINDINGS<<<
  1375. .iX >>>HOME<<<
  1376. .iX ".origami>>>RC_ENDING<<<"
  1377. Displays the binding information stored in $>>>HOME<<</.origami>>>RC_ENDING<<<.  All
  1378. currently recognized keyboard inputs will be printed.
  1379. There are some special keys, which can modify the display of the list:
  1380. .\"{{{  space
  1381. .bI "` '  (space)"
  1382. Move the screen one page up.
  1383. .Ib
  1384. .\"}}}
  1385. .\"{{{  prev-page
  1386. .bI "\fBB\fP or \fBb\fP"
  1387. Show the page before the current one.
  1388. .Ib
  1389. .\"}}}
  1390. .\"{{{  >>>O_RETURN<<<
  1391. .bI "\fB>>>O_RETURN<<<\fP"
  1392. .dX >>>O_RETURN<<<
  1393. Move the screen one line up.
  1394. .Ib
  1395. .\"}}}
  1396. .\"{{{  filter
  1397. .bI "\fBF\fP or \fBf\fP"
  1398. prompts for a pattern and starts the list display again.  Only lines
  1399. matching the pattern are displayed.  The empty pattern matches all
  1400. lines.
  1401. .Ib
  1402. .\"}}}
  1403. .\"{{{  search
  1404. .bI "\fBS\fP or \fBs\fP"
  1405. Prompts for a pattern and skips forward to the next line matching the
  1406. pattern.
  1407. .Ib
  1408. .\"}}}
  1409. .\"{{{  quit
  1410. .bI "\fBQ\fP or \fBq\fP"
  1411. Stop the help display.
  1412. .Ib
  1413. .\"}}}
  1414. .\"{{{  kill
  1415. .bI "\fBK\fP or \fBk\fP"
  1416. Like \fBQ\fP, but the current help view is copied to the kill buffer.  If
  1417. a pattern for filtering is used, only lines, matching this pattern will
  1418. be killed.
  1419. .Ib
  1420. .\"}}}
  1421. .nB
  1422. lines match a pattern, if the contain the pattern literaly.
  1423. .Ib
  1424. .\"}}}
  1425. .\"{{{  >>>O_HELP<<<
  1426. .bI "\fB>>>O_HELP<<<\fP"
  1427. .dX >>>O_HELP<<<
  1428. .iX >>>HOME<<<
  1429. .iX ".origami>>>HELP_ENDING<<<"
  1430. .iX ".origami>>>RC_ENDING<<<"
  1431. Displays the helpfile $>>>HOME<<</.origami>>>HELP_ENDING<<<.  Since there is no
  1432. default file for this function, you can create your own helpfile.  It
  1433. may be useful for new and very complicated functions/macros or other
  1434. things you always forget.  If there is no file $>>>HOME<<</.origami>>>HELP_ENDING<<<,
  1435. Origami tries to get the referencedata from >>>RC_ENDING<<< file.
  1436. .LP
  1437. You can use the same control keys as in \fB>>>O_DESCRIBE_BINDINGS<<<\fP.
  1438. .LP
  1439. .iX @>>>STARTREF_NO<<<
  1440. .iX >>>M_O_VAR<<<
  1441. If OCL variable \fB>>>M_O_VAR<<<\fP is not set to  \fB0\fP,  the
  1442. corresponding special help entry, generated by \fB@>>>STARTREF_NO<<<\fP
  1443. will be shown.  Negative values for \fB>>>M_O_VAR<<<\fP are not allowed
  1444. and \fB>>>M_O_VAR<<<\fP will be set to \fB0\fP in these cases!
  1445. .Ib
  1446. .\"}}}
  1447. .\"{{{  >>>O_LANGUAGE<<<
  1448. .bI "\fB>>>O_LANGUAGE<<<\fP"
  1449. .dX >>>O_LANGUAGE<<<
  1450. .iX comment
  1451. .iX language
  1452. Allows you to select the language for which the code is to be saved \(em
  1453. ie the format in which folds are to be saved.  This can be done by
  1454. entering the first character of the language or by using
  1455. \fB>>>O_RIGHT<<<\fP, \fB>>>O_LEFT<<<\fP to move the menu
  1456. cursor, which starts on the currently used language (ie is displayed
  1457. inverse.)  If you choose \fBUser\fP, Origami prompts for the begin
  1458. comment and end comment strings used for hiding the fold comments.  Each
  1459. string can be up to >>>FOLD_COMMENT_LENGTH<<< characters in length.
  1460. .nB
  1461. if the current language is \fB>>>LANG_Inmos<<<\fP, Origami prompts for permission,
  1462. to prevent destruction of internal >>>LANG_Inmos<<< information.
  1463. .Ib
  1464. .\"}}}
  1465. .\"{{{  >>>O_FOLD_INFO<<<
  1466. .bI "\fB>>>O_FOLD_INFO<<<\fP"
  1467. .dX >>>O_FOLD_INFO<<<
  1468. .iX >>>OCL_ARG_V<<<
  1469. Displays information on current cursor position in file and the
  1470. character under the cursor as character and as octal,decimal and hex
  1471. number.  After this, the number of entered folds in current file,
  1472. indentation of currently entered fold and perhaps information about the
  1473. closed foldline under the cursor is displayed.  The fold information is
  1474. a pair of numbers.  The first number describes the fold type and the
  1475. second the fold contents (range 0..255).  These codings have specific
  1476. meanings in TDS.  The OCL-variable \fB>>>OCL_ARG_V<<<\fP is set to:
  1477. .nI
  1478. .TS
  1479. tab(|);
  1480. l l.
  1481. 256*type+contents|if type<128
  1482. -(256*(type mod 128)+contents)|otherwise
  1483. .TE
  1484. .In
  1485. .lC
  1486. .Ib
  1487. .\"}}}
  1488. .\"{{{  modes
  1489. .iX modes
  1490. .\"{{{  >>>O_UNCHANGE<<<
  1491. .bI "\fB>>>O_UNCHANGE<<<\fP"
  1492. .dX >>>O_UNCHANGE<<<
  1493. Marks the file as unchanged.
  1494. .Ib
  1495. .\"}}}
  1496. .\"{{{  position
  1497. .bI "\fB>>>O_A_POSI<<<\fP"
  1498. .dX >>>O_A_POSI<<<
  1499. Display current position in front of the filename.
  1500. .Ib
  1501. .bI "\fB>>>O_D_POSI<<<\fP"
  1502. .dX >>>O_D_POSI<<<
  1503. Switch off the display of the current position.
  1504. .Ib
  1505. .\"}}}
  1506. .\"{{{  full-shift
  1507. .bI "\fB>>>O_A_FULLSHIFT<<<\fP"
  1508. .dX >>>O_A_FULLSHIFT<<<
  1509. .dX full-shift-mode
  1510. Activates full-shift mode. Moving over the right border of a buffer
  1511. scrolls the whole buffer, not only the current line!
  1512. .Ib
  1513. .bI "\fB>>>O_D_FULLSHIFT<<<\fP"
  1514. .iX >>>OCL_ARG_V<<<
  1515. .dX >>>O_D_FULLSHIFT<<<
  1516. .iX full-shift-mode
  1517. Switches full-shift mode off and set OCL variable \fB>>>OCL_ARG_V<<<\fP
  1518. to \fB1\fP, if mode \fBfull-shift\fP was active, otherwise \fB0\fP.
  1519. .Ib
  1520. .\"}}}
  1521. .\"{{{  edit/view
  1522. .dX view-mode
  1523. .bI "\fB>>>O_A_VIEW<<<\fP"
  1524. .dX >>>O_A_VIEW<<<
  1525. Sets view only mode.  Changing the file is not possible.
  1526. .Ib
  1527. .bI "\fB>>>O_D_VIEW<<<\fP"
  1528. .dX >>>O_D_VIEW<<<
  1529. Sets edit mode.
  1530. .Ib
  1531. .\"}}}
  1532. .\"{{{  insert/overwrite
  1533. .bI "\fB>>>O_A_OVER<<<\fP"
  1534. .dX >>>O_A_OVER<<<
  1535. .dX overwrite-mode
  1536. Sets overwrite mode.  Text input will overwrite other text.
  1537. .Ib
  1538. .bI "\fB>>>O_D_OVER<<<\fP"
  1539. .dX >>>O_D_OVER<<<
  1540. Sets insert mode.  Text input will be inserted.
  1541. .Ib
  1542. .\"}}}
  1543. .\"{{{  hash-shift
  1544. .bI "\fB>>>O_A_HASH<<<\fP"
  1545. .dX >>>O_A_HASH<<<
  1546. .dX hash-shift-mode
  1547. Activates hash-shift-mode (like command line option \fB\-p\fP).
  1548. On reading files, leading hashes are moved to fold indentation level and
  1549. on writing files, they will be moved to column 1. Useful for editing C
  1550. sources.
  1551. .nB
  1552. this mode is automatically switched on, if the parsed file contains  a
  1553. leading \fB#\fP in front of the fold indentation level!
  1554. .Ib
  1555. .bI "\fB>>>O_D_HASH<<<\fP"
  1556. .dX >>>O_D_HASH<<<
  1557. .iX hash-shift-mode
  1558. Switches hash-shift mode off.
  1559. .Ib
  1560. .\"}}}
  1561. .\"{{{  regular-expression-search
  1562. .bI \fB>>>O_A_B_REGEXP<<<\fP
  1563. .dX >>>O_A_B_REGEXP<<<
  1564. .iX regular expression
  1565. The search patterns in \fB>>>O_FIND<<<\fP, \fB>>>O_FIND_REVERSE<<<\fP,
  1566. \fB>>>O_ITS_SEARCH<<<\fP, \fB>>>O_ITS_REVERSE<<<\fP,
  1567. \fB>>>O_REPLACE<<<\fP and \fB>>>O_QUERY_REPLACE<<<\fP are read as basic
  1568. regular expressions (like vi).  OCL variable \fB>>>OCL_ARG_V<<<\fP is
  1569. set to \fB1\fP.
  1570. .Ib
  1571. .bI \fB>>>O_A_X_REGEXP<<<\fP
  1572. .dX >>>O_A_X_REGEXP<<<
  1573. .iX regular expression
  1574. The search patterns in \fB>>>O_FIND<<<\fP, \fB>>>O_FIND_REVERSE<<<\fP,
  1575. \fB>>>O_ITS_SEARCH<<<\fP, \fB>>>O_ITS_REVERSE<<<\fP, \fB>>>O_REPLACE<<<\fP
  1576. and \fB>>>O_QUERY_REPLACE<<<\fP are read as extended regular expressions
  1577. (like egrep).  OCL variable \fB>>>OCL_ARG_V<<<\fP is set to \fB2\fP.
  1578. .Ib
  1579. .bI \fB>>>O_D_REGEXP<<<\fP
  1580. .dX >>>O_D_REGEXP<<<
  1581. .iX >>>OCL_ARG_V<<<
  1582. .iX regular expression
  1583. The search patterns in \fB>>>O_FIND<<<\fP, \fB>>>O_FIND_REVERSE<<<\fP,
  1584. \fB>>>O_ITS_SEARCH<<<\fP, \fB>>>O_ITS_REVERSE<<<\fP,
  1585. \fB>>>O_REPLACE<<<\fP and \fB>>>O_QUERY_REPLACE<<<\fP are used literaly.
  1586. OCL variable \fB>>>OCL_ARG_V<<<\fP is set to:
  1587. .TS
  1588. tab(|);
  1589. c l.
  1590. Value|Active regular expressions
  1591. 0|none
  1592. 1|basic
  1593. 2|extended
  1594. .TE
  1595. .Ib
  1596. .\"}}}
  1597. .\"{{{  echo on/off
  1598. .bI "\fB>>>O_A_ECHO<<<\fP"
  1599. .dX >>>O_A_ECHO<<<
  1600. Incomplete keysequences are displayed under the status line.
  1601. .Ib
  1602. .bI "\fB>>>O_D_ECHO<<<\fP"
  1603. .dX >>>O_D_ECHO<<<
  1604. Do not show unfinished keysequences.
  1605. .Ib
  1606. .\"}}}
  1607. .\"{{{  time on/off
  1608. .bI "\fB>>>O_A_TIME<<<\fP"
  1609. .dX >>>O_A_TIME<<<
  1610. Display the time right from the filename.
  1611. .nB
  1612. while Origami is waiting for a keyboard input, the display will not be
  1613. updated!
  1614. .Ib
  1615. .bI "\fB>>>O_D_TIME<<<\fP"
  1616. .dX >>>O_D_TIME<<<
  1617. .iX >>>OCL_ARG_V<<<
  1618. Do not display the time right from the filename.  OCL variable
  1619. \fB>>>OCL_ARG_V<<<\fP is set to 1(0), if time display was switched
  1620. on(off).
  1621. .Ib
  1622. .\"}}}
  1623. .\"{{{  verbose on/off
  1624. .bI "\fB>>>O_A_VERBOSE<<<\fP"
  1625. .dX >>>O_A_VERBOSE<<<
  1626. .iX verbose
  1627. Switch verbose-mode on. Some commands print error messages.
  1628. .Ib
  1629. .bI "\fB>>>O_D_VERBOSE<<<\fP"
  1630. .dX >>>O_D_VERBOSE<<<
  1631. .iX verbose
  1632. Switch verbose-mode on.  Only important messages appear below the status
  1633. line. This is the default.
  1634. .Ib
  1635. .\"}}}
  1636. .\"{{{  auto-save on/off
  1637. .dX autosave-mode
  1638. .bI "\fB>>>O_A_AUTO_SAVE<<<\fP"
  1639. .dX >>>O_A_AUTO_SAVE<<<
  1640. .iX >>>DEFAUTOSAVE<<<
  1641. Prompts for the auto save interval in minutes.  Origami will save your
  1642. files periodically in auto save mode, unless \fB>>>DEFAUTOSAVE<<<\fP is
  1643. used.  In this case the given macro will be executed instead.  Default
  1644. time is >>>NORM_ALARMTIME<<< minutes.  Minimum is >>>MIN_ALARMTIME<<<
  1645. minutes and maximum is >>>MAX_ALARMTIME<<< minutes.
  1646. .LP
  1647. If OCL variable \fB >>>M_O_VAR<<<\fP is set to a value \fIx\fP>0,
  1648. \fB>>>O_A_AUTO_SAVE<<<\fP will not prompt for a delay, but use \fIx\fP
  1649. seconds.  Very small values for \fIx\fP may be dangerous!
  1650. .LP
  1651. While Origami is waiting for a keyboard input, the save will be delayed!
  1652. .nB
  1653. You have checked in the previous version properly into RCS haven't you?
  1654. .Ib
  1655. .bI "\fB>>>O_D_AUTO_SAVE<<<\fP"
  1656. .dX >>>O_D_AUTO_SAVE<<<
  1657. .iX >>>OCL_ARG_V<<<
  1658. auto save is switched off.  The OCL-variable \fB>>>OCL_ARG_V<<<\fP is
  1659. set to the auto save interval in seconds, or 0, if auto save is already
  1660. switched off.
  1661. .Ib
  1662. .\"}}}
  1663. .\"{{{  no-parse on/off
  1664. .dX no-parse-mode
  1665. .bI "\fB>>>O_A_NOPARSE<<<\fP"
  1666. .dX >>>O_A_NOPARSE<<<
  1667. Origami does not parse for folds, whilst reading files (similar to the command
  1668. line option \fB\-n\fP).
  1669. .iX >>>OCL_ARG_V<<<
  1670. The OCL-variable \fB>>>OCL_ARG_V<<<\fP is set to \fB1\fP, if parsing was
  1671. activ, otherwise \fB0\fP.
  1672. .Ib
  1673. .bI "\fB>>>O_D_NOPARSE<<<\fP"
  1674. .dX >>>O_D_NOPARSE<<<
  1675. Origami parses folds during every command where a file is read.
  1676. .iX >>>OCL_ARG_V<<<
  1677. The OCL-variable \fB>>>OCL_ARG_V<<<\fP is set to \fB1\fP, if parsing was
  1678. activ, otherwise \fB0\fP.
  1679. .Ib
  1680. .\"}}}
  1681. .\"{{{  status-line
  1682. .iX "status line"
  1683. .bI "\fB>>>O_TITLE_HIDE<<<\fP"
  1684. .dX >>>O_TITLE_HIDE<<<
  1685. Displaying the status line is disabled.
  1686. .Ib
  1687. .bI "\fB>>>O_TITLE_SHOW<<<\fP"
  1688. .dX >>>O_TITLE_SHOW<<<
  1689. Displaying the status line is enabled.
  1690. .Ib
  1691. .\"}}}
  1692. .\"{{{  display
  1693. .iX display
  1694. .dX >>>O_DSP<<<
  1695. .iX >>>M_O_VAR<<<
  1696. .iX >>>OCL_ARG_V<<<
  1697. .bI "\fB>>>O_DSP<<<\fP"
  1698. Show a menu for selecting the text display mode.  You can choose:
  1699. .\"{{{  quit
  1700. .bI "\fBQuit\fP
  1701. Leave the menu loop.
  1702. .Ib
  1703. .\"}}}
  1704. .\"{{{  octal
  1705. .bI "\fBOctal\fP"
  1706. Use the octal format (`\fB\e\fP\fIxxx\fP') for characters, displayed as
  1707. numbers.
  1708. .Ib
  1709. .\"}}}
  1710. .\"{{{  decimal
  1711. .bI "\fBDecimal\fP"
  1712. Use the decimal format (`\fB\ed\fP\fIxxx\fP') for characters, displayed as
  1713. numbers.
  1714. .Ib
  1715. .\"}}}
  1716. .\"{{{  hex
  1717. .bI "\fBHex\fP"
  1718. Use the hexadecimal format (`\fB\e\fP\fIxx\fP') for characters, displayed as
  1719. numbers.
  1720. .Ib
  1721. .\"}}}
  1722. .\"{{{  mark
  1723. .bI "\fBMark\fP"
  1724. Display control characters with \fB>>>CTRL_MARK<<<\fP followed by one of
  1725. the coding characters \fB>>>CTRL_CHARS<<<\fP.
  1726. .Ib
  1727. .\"}}}
  1728. .\"{{{  invers
  1729. .bI "\fBInvers\fP"
  1730. Display control characters as invers coding character.
  1731. .Ib
  1732. .\"}}}
  1733. .\"{{{  number
  1734. .bI "\fBNumber\fP"
  1735. Display control characters as numbers (octal,decimal or hexadecimal).
  1736. .Ib
  1737. .\"}}}
  1738. .\"{{{  tab
  1739. .bI "\fBTab(\fP\fIn\fP\fB)\fP"
  1740. .iX tab
  1741. Prompts for the width of a tab.  \fIn\fP is the active size.  Negative values
  1742. and 0 will handle the tab as a normal control character.
  1743. .Ib
  1744. .\"}}}
  1745. .\"{{{  plain
  1746. .bI "\fBPlain\fP"
  1747. Display normal characters by temselves.
  1748. .Ib
  1749. .\"}}}
  1750. .\"{{{  8-Bit
  1751. .bI "\fB8-Bit\fP"
  1752. Display characters with set highbit as numbers (octal,decimal or hexadecimal).
  1753. .Ib
  1754. .\"}}}
  1755. .\"{{{  Full
  1756. .bI "\fBFull\fP"
  1757. Display all characters as numbers (octal,decimal or hexadecimal).
  1758.  
  1759. .nB
  1760. .iX area
  1761. .iX "display area"
  1762. the numbered display for normal characters is only used for the text
  1763. display window.  The display area and the status line are not concerned!
  1764. .Ib
  1765. .\"}}}
  1766.  
  1767. If OCL variable \fB>>>M_O_VAR<<<\fP is not null, the menu loop will be
  1768. ended after the first chosen item.
  1769. .LP
  1770. \fB>>>OCL_ARG_V<<<\fP is set to a coding of the current display mode:
  1771. .sI \fB64*\fP\fItab-width\fP+\fIbit-code\fP
  1772. with
  1773. .bI \fIbit-code\fP uses the bits for:
  1774. .TS
  1775. tab(|);
  1776. c l.
  1777. 0 | inverse control characters
  1778. 1 | marked control characters
  1779. 2 | numbered 8-bit characters
  1780. 3 | all characters numbered
  1781. 4 | octal display
  1782. 5 | decmal display
  1783. .TE
  1784. .Ib
  1785. .Ib
  1786. .\"}}}
  1787. .\"}}}
  1788. .\"{{{  no-operation
  1789. .bI "\fBno-operation\fP"
  1790. .dX no-operation
  1791. No operation.  This command can be used to explicitly disable keyboard
  1792. inputs.
  1793. .Ib
  1794. .\"}}}
  1795. .\"{{{  >>>O_BELL<<<
  1796. .bI "\fB>>>O_BELL<<<\fP"
  1797. .dX >>>O_BELL<<<
  1798. Activates the bell of your terminal.
  1799. .Ib
  1800. .\"}}}
  1801. .\"{{{  >>>O_BELL_VISIBLE<<<
  1802. .bI "\fB>>>O_BELL_VISIBLE<<<\fP"
  1803. .dX >>>O_BELL_VISIBLE<<<
  1804. Activates the `visible bell' of your terminal.
  1805. .Ib
  1806. .\"}}}
  1807. .\"{{{  >>>O_BREAK<<<
  1808. .bI "\fB>>>O_BREAK<<<\fP"
  1809. .dX >>>O_BREAK<<<
  1810. Aborts any operation.  There are several commands which can be aborted
  1811. by this key.  This operation can only be bound to a single key.  This
  1812. key will even stop a running function/macro, which may be useful to
  1813. interrupt an endless loop.  If you are anxious Origami might be doing
  1814. something wrong, this key returns you to a safe state.  Writing files
  1815. can also be interrupted.  \fB>>>O_BREAK<<<\fP can abort the reading of files for
  1816. the following commands:
  1817. .\"{{{  table of commands
  1818. .nI
  1819. .TS
  1820. tab(|);
  1821. l l.
  1822. Command:|condition:
  1823. \fB>>>O_ENTER_FOLD<<<\fP|a filed fold
  1824. \fB>>>O_EXIT_FOLD<<<\fP|a filed fold
  1825. \fBfile-fold\fP|unfiling a filed fold
  1826. \fB>>>O_INSERT_FILE<<<\fP
  1827. \fB>>>O_FILTER_BUFFER<<<\fP
  1828. \fB>>>O_PIPE_FROM_COMMAND<<<\fP
  1829. reading startup file|edit-file and stdin-pipe
  1830. .TE
  1831. .In
  1832. .\"}}}
  1833. .iX TDS
  1834. In this case, Origami simulates \fBeof\fP for ASCII-reading and
  1835. >>>O_BOT_OF_FOLD<<< for all open folds for TDS-reading.
  1836. .Ib
  1837. .\"}}}
  1838. .\"{{{  >>>O_CHANGE_MARK<<<
  1839. .bI "\fB>>>O_CHANGE_MARK<<<\fP"
  1840. .dX >>>O_CHANGE_MARK<<<
  1841. .iX mark
  1842. Prompts for the fold marks and replaces them by the new one.  Works like
  1843. \fB\-M\fP.
  1844. .Ib
  1845. .\"}}}
  1846. .\"}}}
  1847. .\"{{{  how to get out
  1848. .nH 2 "How to get out"
  1849. .\"{{{  >>>O_FINISH<<<
  1850. .bI "\fB>>>O_FINISH<<<\fP"
  1851. .dX >>>O_FINISH<<<
  1852. Exits entered folds as needed.  Saves the file if changed.  If the
  1853. buffer was the last buffer this command exits from Origami.
  1854. .nB
  1855. if Origami is in view mode, the file will not be saved.
  1856. .Ib
  1857. .\"}}}
  1858. .\"{{{  >>>O_QUIT<<<
  1859. .bI "\fB>>>O_QUIT<<<\fP"
  1860. .dX >>>O_QUIT<<<
  1861. If there are unsaved changes to the file in the current buffer, Origami
  1862. prompts for permission to close and quit the buffer anyway.
  1863. .Ib
  1864. .\"}}}
  1865. .\"}}}
  1866. .\"}}}
  1867. .\"{{{  Programming in OCL
  1868. .nH 1 "Programming in OCL"
  1869. .\"{{{  introduction to this chapter
  1870. .LP
  1871. .dX OCL
  1872. This chapter describes OCL (Origami control language) and gives some
  1873. examples to show how powerful it is.  OCL is a programming language
  1874. offering capabilities to use conditional statements, subroutines, loops,
  1875. variables and recursion.  It looks like LISP, but it is closer to an
  1876. assembly language.  The keybind program compiles human readable OCL
  1877. source code into a tokenized binary form which will be interpreted by
  1878. Origami.  Every binding of functions to keysequences must be done in this
  1879. binary file.  The functions described in the chapter explaining
  1880. keybindings are very simple OCL statements.
  1881. .\"}}}
  1882. .\"{{{  resource files
  1883. .nH 2 "Resource files"
  1884. .LP
  1885. .dX ".origami>>>RC_ENDING<<<"
  1886. .dX ".origami>>>MSG_ENDING<<<"
  1887. .dX ".origami>>>HELP_ENDING<<<"
  1888. .dX >>>ORIPATH<<<
  1889. .dX >>>ORIPATH_1<<<
  1890. .iX path
  1891. Origami needs some startup resource files to work.  They are named
  1892. \fB\&.origami\fP\fIending\fP.
  1893. .LP
  1894. Used endings are:
  1895. .\"{{{  >>>MSG_ENDING<<<
  1896. .bI "\fB>>>MSG_ENDING<<<\fP
  1897. This file contains the text strings displayed by Origami during an
  1898. editing session.  This file can be changed by editing it.
  1899. .wA
  1900. The length of the lines must not be changed!
  1901. .Ib
  1902. .\"}}}
  1903. .\"{{{  rc
  1904. .bI "\fB>>>RC_ENDING<<<\fP"
  1905. This file contains the binding of functions to keys, the functions, the
  1906. macros and all other stuff, explained below.  Use \fBkeybind\fP to
  1907. create new >>>RC_ENDING<<<-files.
  1908. .Ib
  1909. .\"}}}
  1910. .\"{{{  help
  1911. .bI "\fB>>>HELP_ENDING<<<\fP"
  1912. This file will be displayed, when calling the function \fB>>>O_HELP<<<\fP.  Any
  1913. text file is allowed.
  1914. .Ib
  1915. .\"}}}
  1916. .LP
  1917. The part \fBorigami\fP in the filename can be changed by setting the
  1918. command line option \fB\-k\fP\fIname\fP or using links to the binary.
  1919. The \fB.origami>>>MSG_ENDING<<<\fP-file must not be renamed, because Origami looks
  1920. for this file, if it cannot find the \fB>>>MSG_ENDING<<<\fP-file with the new name.
  1921. .LP
  1922. You can set the environment variable >>>ORIPATH<<< (or >>>ORIPATH_1<<<) to a
  1923. \fB:\fP or \fB^A\fP separated list of directories (Default is
  1924. \fB>>>ORIGAMI_RC_PATH_STRING<<<\fP).  Uppercase variables with \fB:\fP as delimiter
  1925. are usually used in \fBsh\fP and \fBcsh\fP, whereas \fB>>>RC_ENDING<<<\fP is able to
  1926. use real lists in variables (usually written in lowercase letters), which are
  1927. stored with \fB^A\fP as delimiter.  Origami looks for the resource files
  1928. in all these directories.  If commandline option \fB\-k\fP \fIname\fP is
  1929. used, and  \fIname\fP is an absolute path, starting from the root
  1930. directory, origami ignores the resource path to look for the bindings
  1931. file.
  1932. .\"}}}
  1933. .\"{{{  OCL syntax and semantics
  1934. .nH 2 "OCL syntax and semantics"
  1935. .\"{{{  general infos
  1936. .LP
  1937. This section describes all OCL elements.  It is assumed you are
  1938. familiar with other programming languages.  You will find OCL examples in a
  1939. later section.
  1940. .LP
  1941. .iX comment
  1942. Newlines and comments can be used anywhere in the text between syntactical
  1943. structures.  A comment starts with \fB;\fP and ends at end of line.
  1944. .LP
  1945. .iX variable
  1946. .iX integer
  1947. Though different machines have different wordlength, we use a 16 bit
  1948. coding for internal OCL integers.  Therefore the only machine
  1949. dependencies is the character coding (ASCII, ..).
  1950. .LP
  1951. Internal integers (addresses in macro code and constants in expressions)
  1952. are limited to \-32768..32767.
  1953. .\"}}}
  1954. .\"{{{  filed folds, include and libs
  1955. .nH 3 "Filed folds and libraries"
  1956. .LP
  1957. .iX libraries
  1958. .iX "Conditional compilation"
  1959. .\"{{{  filed fold or @>>>include_name<<<
  1960. .iX "filed fold"
  1961. .iX ">>>include_name<<<"
  1962. Using language \fBNone\fP, keybind will automatically include the
  1963. contents of filed folds when reading the source file.  Entering filed
  1964. fold is limited in depth to >>>OCL_FILE_DEPTH<<<.  Normally multiple includes of the
  1965. same file will not work, because redefinition of functions/macros is not
  1966. allowed.  To build a clean library, you can use the conditional
  1967. compilation explained below.
  1968. .LP
  1969. Files can be included without filed folds using:
  1970. .sI "\fB@>>>include_name<<<\fP \fIfilename\fP"
  1971. .Is
  1972. .dX @>>>include_name<<<
  1973. .\"}}}
  1974. .\"{{{  @>>>LIB<<<
  1975. .LP
  1976. Another way to include library files is:
  1977. .bI "\fB@>>>LIB<<<\fP \fIfilename\fP"
  1978. .iX libraries
  1979. .dX @>>>LIB<<<
  1980. .dX >>>KBDPATH<<<
  1981. .dX >>>KBDPATH_1<<<
  1982. .iX path
  1983. Keybind looks for the file \fIfilename\fP in several directories, given
  1984. in the keybind library path.  This path can be set by environment
  1985. variables \fB>>>KBDPATH<<<\fP or \fB>>>KBDPATH_1<<<\fP (Default is
  1986. \fB>>>KBD_PATH_STRING<<<\fP).  Like for resource files, this path is
  1987. a '\fB:\fP' or '\fB^A\fP' separated list of directories.  The first
  1988. directory, containing \fIfilename\fP, is used.  If \fIfilename\fP is
  1989. an absolute path, keybind ignores the library path.
  1990. .Ib
  1991. .\"}}}
  1992. .\"}}}
  1993. .\"{{{  naming the bindings
  1994. .nH 3 "Name and command line options"
  1995. .\"{{{  >>>BINDNAME<<<
  1996. .bI "\fB(>>>BINDNAME<<<\fP \fIname-of-binding\fP [ \fB(\fP \fIstring string\fP \fB)\fP ... ] \fB)\fP"
  1997. .dX >>>BINDNAME<<<
  1998. Defines a name for the binding which is displayed in the status line of
  1999. Origami.  If none is given, \fBOrigami\fP will be displayed.  Multiple
  2000. usage of this command is not allowed.  The name is limited to >>>BIND_NAME_LEN<<<
  2001. characters.
  2002. .LP
  2003. .iX >>>OCL_ARG_V<<<
  2004. .iX "Command line options"
  2005. The optional list of string pairs can be used to define command line
  2006. option aliases.  If '\fI( "alias "value )\fP' is defined,
  2007. \&'\fB\-O\fP\fIalias\fP' will be replaced by '\fB\-O\fP\fIvalue\fP' at
  2008. startup.  Alias name can use up to >>>BIND_NAME_LEN<<< characters.
  2009. The aliased string may not contain other aliases!
  2010. \fIname-of-binding\fP and the alias names will appear in the \fB\-h\fP
  2011. output for \fB\-O\fP, if the correct >>>RC_ENDING<<< file is read.
  2012. .nB
  2013. option aliases are stored in a fixed size field.  There is place for
  2014. >>>NO_OCL_CMD_OPTS<<<, using a >>>BIND_NAME_LEN<<< character name and a
  2015. >>>BIND_NAME_LEN<<< character value.  Shorter or longer values are allowed,
  2016. but the total maximum size cannot be changed!
  2017. .Ib
  2018. .\"}}}
  2019. .\"}}}
  2020. .\"{{{  bindings
  2021. .nH 3 "Binding commands to keys"
  2022. .LP
  2023. .\"{{{  >>>KEYDEF<<<
  2024. .dX >>>KEYDEF<<<
  2025. .\"{{{  op
  2026. .bI "\fB(>>>KEYDEF<<<\fP \fIoperation\fP \fIkeysequence\fP\fB)\fP"
  2027. The Origami operation named \fIoperation\fP is bound to the keyboard
  2028. input \fIkeysequence\fP.  The binding help will contain the entry:
  2029. .DS
  2030. \fBoperation keysequence\fP
  2031. .DE
  2032. .Ib
  2033. .\"}}}
  2034. .\"{{{  char
  2035. .hI
  2036. \fB(>>>KEYDEF<<< "\fP\fIsingle-char\fP \fIkeysequence\fP\fB)\fP
  2037. .tI
  2038. The normal character \fIsingle-char\fP is bound to the keyboard input
  2039. \fIkeysequence\fP.  The binding help will contain the entry:
  2040. .DS
  2041. \fBsingle-char keysequence\fP.
  2042. .DE
  2043. For example, this form of keybind can be used to map some keys of a
  2044. keypad to normal characters like + or * while using others as cursor
  2045. keys.
  2046. .eI
  2047. .\"}}}
  2048. .\"{{{  \-
  2049. .bI "\fB(>>>KEYDEF<<< \-\fP \fIkeysequence\fP\fB)\fP"
  2050. .iX >>>KNBM<<<
  2051. \fIkeysequence\fP triggers the \fBkey-not-bound\fP-handling.  Complain about
  2052. the unknown sequence, and if \fB>>>KNBM<<<\fP was used, start the
  2053. corresponding action.  This bindings will not be stored in the bindings list.
  2054. .Ib
  2055. .\"}}}
  2056. .\"}}}
  2057. .\"{{{  >>>KEYALIAS<<<
  2058. .bI "\fB(>>>KEYALIAS<<<\fP \fIname\fP \fIkeysequence\fP\fB)\fP"
  2059. .dX >>>KEYALIAS<<<
  2060. .dX $
  2061. The keyboard input \fIkeysequence\fP can be addressed as
  2062. \fB$\fP\fIname\fP in the following definitions.  Using \fB$\fP\fIname\fP
  2063. places the symbolic reference name in the binding help rather than the
  2064. key sequence itself.
  2065. .LP
  2066. Multiple \fB>>>KEYALIAS<<<\fP definitions for a single key \fIname\fP are
  2067. allowed.  In this case, every use of \fB$\fP\fIname\fP will generate as
  2068. many sequences, as \fB>>>KEYALIAS<<<\fP are defined.
  2069. .LP
  2070. The following >>>KEYALIAS<<< can be used without declaration:
  2071. .dX $esc
  2072. .DS
  2073. \fB$esc\fP = escape key = 27
  2074. .DE
  2075. .iX autoalias
  2076. Use \fBautoalias\fP to create your >>>KEYALIAS<<< declarations.
  2077. .Ib
  2078. .\"}}}
  2079. .\"{{{  description of operands
  2080. .\"{{{  name
  2081. .bI \fIname\fP
  2082. .dX name
  2083. \fIname\fP is a normal identifier not beginning with \fB@\fP.  The length
  2084. is limited to >>>NAME_LG<<<.
  2085. .Ib
  2086. .\"}}}
  2087. .\"{{{  keysequence
  2088. .bI \fIkeysequence\fP
  2089. .dX keysequence
  2090. \fIkeysequence\fP is a sequence of \fIkey\fP enclosed in parentheses.
  2091. \fIkeysequence\fPs are limited in length to >>>ALIAS_LG<<<.  \fIkey\fP specifies
  2092. a single key (or two keys, because \fBM\-"a\fP requires two keystrokes).
  2093. Valid declarations for \fIkey\fP are:
  2094. .\"{{{  single char
  2095. .bI \fB"\fP\fIx\fP
  2096. the single character \fIx\fP.  ' ' will be named \fBspace\fP in the
  2097. bindinglist.
  2098. .Ib
  2099. .\"}}}
  2100. .\"{{{  control
  2101. .bI \fBC\-\fP\fIX\fP
  2102. .dX C-
  2103. codes the non printable characters.  \fB@A\fP..\fBZ[\e]^_\fP codes the
  2104. characters 0..31.  \fB?\fP codes 127=delete-key.
  2105. .Ib
  2106. .\"}}}
  2107. .\"{{{  meta
  2108. .bI \fBM\-"\fP\fIx\fP
  2109. .dX M-
  2110. Meta-key (\fBESC\fP) followed by \fIx\fP (case sensitive)
  2111. .Ib
  2112. .\"}}}
  2113. .\"{{{  meta control
  2114. .bI \fBM\-C\-\fP\fIX\fP
  2115. .dX M-C-
  2116. META-control-\fIx\fP, that means Meta-key (\fBESC\fP) followed by
  2117. non-printable character \fBcontrol\fP-\fIx\fP.
  2118. .Ib
  2119. .\"}}}
  2120. .\"{{{  >>>KEYALIAS<<<
  2121. .bI \fB$\fP\fIname\fP
  2122. .iX >>>KEYALIAS<<<
  2123. .iX $
  2124. the key sequence defined by \fB( >>>KEYALIAS<<<\fP \fIname\fP \&.\&.\&.
  2125. \fB)\fP.  The bindinglist contains \fIname\fP.
  2126. .Ib
  2127. .\"}}}
  2128. .\"{{{  number
  2129. .bI \fB0x\fP\fIhexdigits\fP
  2130. .dX 0x
  2131. represents the given number
  2132. .Ib
  2133. .\"}}}
  2134. .\"{{{  *
  2135. .bI "\fB*\fP"
  2136. .dX *
  2137. Matches all characters, not explicitly bound in another statement.
  2138. .LP
  2139. .iX KNBM
  2140. .iX \-
  2141. The command `\fBunbind-remaining-keys\fP' has been deleted, but you can use
  2142. `\fB*\fP' in the sequence and `\fB\-\fP' as function can be used to replace it:
  2143. .\"{{{  example for unbind-remaining-keys
  2144. .DS
  2145. ; old syntax
  2146. ( unbind-remaining-keys ( mode-name ) )
  2147.  
  2148. ; new syntax
  2149. ( mode mode-name ( >>>KEYDEF<<< - ( * ) ) )
  2150. .DE
  2151. .\"}}}
  2152. The wildcards (`\fB*\fP') in the keysequences are evaluated, after all bindings
  2153. are done.  The following example shows the evaluation of \fB*\fP:
  2154. .\"{{{  complex example and explanation for scopes of *
  2155. .DS
  2156. \fB( >>>KEYALIAS<<<\fP \fIf1\fP \fB(\fP \fI$esc "[ "2 "4 "0\fP \fB) )\fP
  2157. \fB( >>>KEYALIAS<<<\fP \fIf2\fP \fB(\fP \fI$esc "[ "2 "4 "1\fP \fB) )\fP
  2158. \fB( >>>KEYALIAS<<<\fP \fIfunction-key-format\fP \fB(\fP \fI$esc "[ *\fP\v'.3m'\h'-.2m'\s-21\s0\h'.2m'\v'-.3m' \fI*\fP\v'.3m'\h'-.2m'\s-22\s0\h'.2m'\v'-.3m' \fI*\fP\v'.3m'\h'-.2m'\s-23\s0\h'.2m'\v'-.3m' \fI"z\fP \fB) )\fP
  2159.  ; \fB>>>KEYALIAS<<<\fP does not bind any key, so:
  2160.  ;  \fI*\fP\v'.3m'\h'-.2m'\s-21-3\s0\h'.2m'\v'-.3m' are not evaluated, only stored
  2161.  
  2162. \fB( >>>KEYDEF<<<\fP \fIfun-1\fP \fB(\fP \fI$f1\fP \fB) )\fP
  2163. \fB( >>>KEYDEF<<<\fP \fIfun-2-1\fP \fB(\fP \fI$f2 "1\fP \fB) )\fP
  2164. \fB( >>>KEYDEF<<<\fP \fIfun-2-2\fP \fB(\fP \fI$f2 "2\fP \fB) )\fP
  2165.  
  2166. \fB( >>>KEYDEF<<<\fP \fI-\fP \fB(\fP \fI*\fP\v'.3m'\h'-.2m'\s-24\s0\h'.2m'\v'-.3m' \fB) )\fP
  2167.  ; only sequences starting with \fI$esc\fP are used, so:
  2168.  ;  \fI*\fP\v'.3m'\h'-.2m'\s-24\s0\h'.2m'\v'-.3m' matches any character, but the escape character
  2169.  
  2170. \fB( >>>KEYDEF<<<\fP \fI-\fP \fB(\fP \fI$function-key-format *\fP\v'.3m'\h'-.2m'\s-25\s0\h'.2m'\v'-.3m' \fB) )\fP
  2171.  ; \fI$f1\fP and \fI$f2\fP are used for bindings, so:
  2172.  ;  \fI*\fP\v'.3m'\h'-.2m'\s-21\s0\h'.2m'\v'-.3m' matches all but `2' here
  2173.  ;  \fI*\fP\v'.3m'\h'-.2m'\s-22\s0\h'.2m'\v'-.3m' matches all but `4' here
  2174.  ;  \fI*\fP\v'.3m'\h'-.2m'\s-23\s0\h'.2m'\v'-.3m' matches all but `0' and `1' here
  2175.  ;  \fI*\fP\v'.3m'\h'-.2m'\s-25\s0\h'.2m'\v'-.3m' matches all but `1' and `2' here
  2176.  
  2177. \fB( >>>KEYDEF<<<\fP \fI-\fP \fB(\fP \fI$esc $function-key-format\fP \fB) )\fP
  2178.  ; there are no bindings for \fI$esc $esc\fP, so:
  2179.  ;  \fI*\fP\v'.3m'\h'-.2m'\s-21-3\s0\h'.2m'\v'-.3m' match any character here
  2180. .DE
  2181. .\"}}}
  2182. .Ib
  2183. .\"}}}
  2184. .Ib
  2185. .\"}}}
  2186. .\"}}}
  2187. .\"{{{  >>>OVER_PRE<<<
  2188. .bI "\fB(>>>OVER_PRE<<< (\fP \fIprefix\fP ... \fB))\fP"
  2189. .dX >>>OVER_PRE<<<
  2190. .dX prefix
  2191. Binding functions named \fIprefix????\fP to keysequences, uses \fI???\fP as
  2192. name instead of \fIprefix???\fP in the binding help.
  2193. .Ib
  2194. .\"}}}
  2195. .\"}}}
  2196. .\"{{{  marks
  2197. .nH 3 "Other marks for folds"
  2198. .iX mark
  2199. .\"{{{  >>>DEFMARK<<<
  2200. .bI "\fB(>>>DEFMARK<<<\fP \fIname\fP \fB(\fP \fImark1\fP \fImark2\fP \fImark3\fP \fImark4\fP \fB))\fP"
  2201. .dX >>>DEFMARK<<<
  2202. This option places the definition of alternative fold marks in the
  2203. >>>RC_ENDING<<<file, so that Origami can switch to these marks when invoked with
  2204. command line option \fB\-m\fP\fIname\fP.  \fIname\fP will be cut, if the
  2205. length is \(>= >>>FOLD_PATTERN_LEN<<<.  The format for \fImark?\fP is:
  2206. .DS
  2207. \fB(\fP \fIsingle-char\fP \fIsingle-char\fP \fIsingle-char\fP \fB)\fP
  2208. .DE
  2209. where \fIsingle-char\fP is a \fB"\fP\fIx\fP definition like in
  2210. \fB(>>>KEYDEF<<<\fP ...  \fB)\fP.  The meanings of \fImark1\fP ...
  2211. \fImark4\fP are:
  2212. .\"{{{  table of marks
  2213. .nI
  2214. .ne 7
  2215. .TS
  2216. tab(|);
  2217. l l c.
  2218. item:|used for:|default:
  2219. \fImark1\fP|begin of fold|\fB{\&{\&{\fP
  2220. \fImark2\fP|closed fold|\fB\&.\&.\&.\fP
  2221. \fImark3\fP|name of filed fold|\fB:\&:\&:\fP
  2222. |attributes of fold
  2223. \fImark4\fP|end of fold|\fB}\&}\&}\fP
  2224. .TE
  2225. .In
  2226. .\"}}}
  2227. .Ib
  2228. .\"}}}
  2229. .\"}}}
  2230. .\"{{{  Subroutines and macros
  2231. .nH 3 "Functions and macros"
  2232. .iX macro
  2233. .iX function
  2234. .\"{{{  >>>DEFOP<<<
  2235. .bI "\fB(>>>DEFOP<<<\fP \fIname\fP \fB(\fP\fIstatement\fP ... \fB))\fP"
  2236. .dX >>>DEFOP<<<
  2237. .dX macro
  2238. A macro \fIname\fP will be defined.  Recursive invocations will be
  2239. detected and handled inside the macro code.  The macrocall will be
  2240. replaced by inline code.  If the OCL-assembler code for this macro has a
  2241. length 1, this macro can also be bound to keys.  Longer macros can only
  2242. be used inside other macro definitions.
  2243. .Ib
  2244. .\"}}}
  2245. .\"{{{  >>>DEFMACRO<<<
  2246. .bI "\fB(>>>DEFMACRO<<<\fP [ \fB(\fP \fIvariable-name\fP ... \fB)\fP ] \fIname\fP \fB(\fP\fIstatement\fP ... \fB))\fP"
  2247. .dX >>>DEFMACRO<<<
  2248. .dX function
  2249. .iX >>>UNDECLARE<<<
  2250. .iX variable
  2251. The operations in \fB(\fP\fIstatement\fP ...  \fB)\fP are written to the
  2252. \&.origami>>>RC_ENDING<<< file so that Origami can initialize a fix-macro-buffer with
  2253. the function \fIname\fP.  Recursion is allowed.  In the OCL text
  2254. following this definition, you can use \fIname\fP as function call or
  2255. for key bindings.  You cannot redefine the function (unless you use
  2256. \fB>>>UNDECLARE<<<\fP).
  2257. .LP
  2258. The optional list of variable-names can be used to specify integer arguments,
  2259. which will be set from the caller.  Recursion is also supported (the values are
  2260. saved on a stack).  Inside \fIstatement\fP, the names given in "\fB(\fP
  2261. \fIvariable-name\fP ...  \fB)\fP" overwrite variables, defined using
  2262. "\fB(>>>DEFVAR<<<\fP ...  \fB)\fP".  After the definition of \fIstatement\fP,
  2263. the variables cannot be accessed anymore.
  2264. .Ib
  2265. .\"}}}
  2266. .\"{{{  >>>DEFASM<<<
  2267. .bI "\fB(>>>DEFASM<<<\fP \fIname\fP \fB(\fP\fIassembler-statement\fP ... \fB))\fP"
  2268. .dX >>>DEFASM<<<
  2269. .iX function
  2270. .iX variable
  2271. .iX >>>FORWARD<<<
  2272. Like \fB>>>DEFMACRO<<<\fP, but the code is given as a list of assembler
  2273. statements.  An argument list cannot be given here.  If you need the
  2274. assembler function to be called with arguments, use '\fB(>>>FORWARD<<<\fP
  2275. \fIargument-list name\fP \fB)\fP' in front of the \fB>>>DEFASM<<<\fP
  2276. statement.  OCL assembler syntax is explained in the appendix.
  2277. .Ib
  2278. .\"}}}
  2279. .\"{{{  >>>INITMACRO<<<
  2280. .bI "\fB(>>>INITMACRO<<<\fP \fIname\fP \fB(\fP\fIstatement\fP ... \fB))\fP"
  2281. .dX >>>INITMACRO<<<
  2282. Like \fB>>>DEFOP<<<\fP.  In addition to this, the code is written to the
  2283. >>>RC_ENDING<<<-file to enable the use of \fIname\fP in \fB(>>>KEYDEF<<<\fP \&.\&.\&.
  2284. \fB)\fP statements.
  2285. .wA
  2286. using \fB>>>O_DEF_FIX<<< x\fP has no effect on functions defined
  2287. with \fB>>>INITMACRO<<<\fP, when calling them by their name inside a
  2288. function/macro.  If you want to use such an effect you must use
  2289. \fB>>>O_CALL_FIX<<< x\fP in the calling function/macro.
  2290. .Ib
  2291. .\"}}}
  2292. .\"{{{  >>>UNDECLARE<<<
  2293. .bI "\fB(>>>UNDECLARE<<< (\fP \fIname\fP ... \fB))\fP"
  2294. .dX >>>UNDECLARE<<<
  2295. .iX function
  2296. .iX macro
  2297. .iX variable
  2298. Remove functions, macros and variables (explained below) from the symbol
  2299. table.  The objects still exist, but the textually following OCL-source
  2300. cannot access them.  It can be used, to hide local variables/macros.
  2301. The names can be used again for other purposes without affecting the
  2302. earlier usage.  Forwarded functions have to be declared, before
  2303. undeclaring them.
  2304. .LP
  2305. You can also undeclare the standard Origami functions (like
  2306. \fB>>>O_ENTER_FOLD<<<\fP).  This can be used to replace the default functions by
  2307. your own:
  2308. .eX >>>DEFOP<<<
  2309. .eX >>>UNDECLARE<<<
  2310. .eX >>>DEFMACRO<<<
  2311. .DS
  2312. ( >>>DEFOP<<< >>>O_ENTER_FOLD<<<-orig ( >>>O_ENTER_FOLD<<< ) )
  2313. ( >>>UNDECLARE<<< ( >>>O_ENTER_FOLD<<< ) )
  2314. ( >>>DEFMACRO<<< >>>O_ENTER_FOLD<<<
  2315.    \&.\&..  your code, using >>>O_ENTER_FOLD<<<-orig
  2316. )
  2317. ( >>>UNDECLARE<<< ( >>>O_ENTER_FOLD<<<-orig ) )
  2318. .DE
  2319. .wA
  2320. using \fB>>>UNDECLARE<<<\fP is the only way for redefining things in OCL, but
  2321. this redefiniton has no effect on definitions, made before!
  2322. .Ib
  2323. .\"}}}
  2324. .\"{{{  usermacro
  2325. .bI "\fB(>>>DEFMYFIX<<<\fP \fInumber\fP\fB)\fP"
  2326. .dX usermacros
  2327. .iX function
  2328. This command must be used before any \fB>>>DEFMACRO<<<\fP/\fB>>>INITMACRO<<<\fP
  2329. statement.  The fix-macro-buffers 1..\fInumber\fP are not used by OCL to
  2330. store functions.  They can be used for \fB>>>O_DEF_FIX<<<\fP.
  2331. .Ib
  2332. .\"}}}
  2333. .\"{{{  which macro places are used
  2334. .nB
  2335. Using the commands \fB>>>DEFMACRO<<<\fP and \fB>>>INITMACRO<<<\fP uses the
  2336. fix-macro-buffers 1,2,.. (or \fIx\fP,\fIx\fP+1,.., if you have used
  2337. \fB(>>>DEFMYFIX<<<\fP \fIx\fP\fB)\fP).
  2338. .\"}}}
  2339. .\"{{{  >>>DEMAND<<<
  2340. .bI "\fB( >>>DEMAND<<< (\fP \fIocl-source\fP \fB) )\fP"
  2341. .dX >>>DEMAND<<<
  2342. .iX >>>DEFAB<<<
  2343. All functions, defined in \fIocl-source\fP using \fB>>>DEFMACRO<<<\fP or
  2344. \fB>>>DEFASM<<<\fP are marked as demand-loading.  Origami doesn't read
  2345. them at startup but at first usage.  \fB>>>DEMAND<<<\fP statements can be
  2346. nested.  The \fB>>>DEFAB<<<\fP or functions called by \fB>>>DEFAB<<<\fP
  2347. may not be marked as demand-loading.
  2348. .Ib
  2349. .\"}}}
  2350. .\"{{{  >>>DEMAND<<< >>>NOT<<<
  2351. .bI "\fB( >>>DEMAND<<< >>>NOT<<<(\fP \fIocl-source\fP \fB) )\fP"
  2352. .dX ">>>DEMAND<<< >>>NOT<<<"
  2353. .iX >>>DEMAND<<<
  2354. .iX >>>NOT<<<
  2355. All functions, defined in \fIocl-source\fP using \fB>>>DEFMACRO<<<\fP or
  2356. \fB>>>DEFASM<<<\fP are not marked as demand-loading.  Origami reads them
  2357. at startup.  Inside \fIocl-source\fP, no other \fB>>>DEMAND<<<\fP or
  2358. \fB>>>DEMAND<<< >>>NOT<<<\fP statements is allowed.
  2359. .Ib
  2360. .\"}}}
  2361. .\"{{{  >>>START_LIST<<<
  2362. .bI "\fB(>>>START_LIST<<<)\fP
  2363. .dX >>>START_LIST<<<
  2364. Origami starts editing the list of edited files, even if command line
  2365. option \fB\-A\fP is not active or number of files is 1.
  2366. .Ib
  2367. .\"}}}
  2368. .\"{{{  no-statusline
  2369. .bI "\fB(>>>O_TITLE_HIDE<<<)\fP"
  2370. .iX "status line"
  2371. .iX ">>>O_TITLE_SHOW<<<"
  2372. .dX ">>>O_TITLE_HIDE<<<"
  2373. Origami starts without displaying the status line.  The Origami commands
  2374. \fB>>>O_TITLE_SHOW<<<\fP and \fB>>>O_TITLE_HIDE<<<\fP can be used during the
  2375. editing to override this default.
  2376. .Ib
  2377. .\"}}}
  2378. .\"{{{  >>>FORWARD<<<
  2379. .bI "\fB(>>>FORWARD<<<\fP [ \fB(\fP \fIvariable-name\fP ... \fB)\fP ] \fIname\fP \fB)\fP"
  2380. .dX >>>FORWARD<<<
  2381. .iX variable
  2382. \fIname\fP is declared as a name for a function defined with \fB>>>INITMACRO<<<\fP
  2383. or \fB>>>DEFMACRO<<<\fP.  In the following statements, \fIname\fP can be used as
  2384. function call even before its actual definition with \fB(>>>DEFMACRO<<<\fP
  2385. \fIname\fP ...  \fB)\fP.
  2386. .Ib
  2387. .\"}}}
  2388. .\"{{{  >>>B_CHG_MAC<<<
  2389. .bI "\fB(>>>B_CHG_MAC<<<\fP \fIname\fP\fB)\fP"
  2390. .dX >>>B_CHG_MAC<<<
  2391. The function named \fIname\fP is called every time, you switch to
  2392. another buffer.
  2393. .Ib
  2394. .\"}}}
  2395. .\"{{{  automacro
  2396. .bI "\fB(>>>DEFAUTO<<<\fP \fIname\fP\fB)\fP"
  2397. .dX >>>DEFAUTO<<<
  2398. The function named \fIname\fP is called every time a new file is edited,
  2399. either explicitly or by entering or exiting a filed fold.
  2400. .Ib
  2401. .\"}}}
  2402. .\"{{{  abortmacro
  2403. .bI "\fB(>>>DEFAB<<<\fP \fIname\fP\fB)\fP"
  2404. .dX >>>DEFAB<<<
  2405. .iX >>>O_BREAK<<<
  2406. The function named \fIname\fP is executed each time the abort key is
  2407. pressed.
  2408. .Ib
  2409. .\"}}}
  2410. .\"{{{  view
  2411. .bI "\fB(>>>VMAC<<<\fP \fIname\fP\fB)\fP"
  2412. .iX view-mode
  2413. .dX >>>VMAC<<<
  2414. .iX >>>OCL_ARG_V<<<
  2415. The function named \fIname\fP is executed at each attempt to change the
  2416. file in view mode.  \fB>>>OCL_ARG_V<<<\fP is set to the ignored OCL
  2417. command.
  2418. .Ib
  2419. .\"}}}
  2420. .\"{{{  promptinmacro
  2421. .bI "\fB(>>>PRO_IN<<<\fP \fIname\fP\fB)\fP"
  2422. .dX >>>PRO_IN<<<
  2423. The function named \fIname\fP is executed each time prompt mode is
  2424. entered (except the OCL commands \fB>>>PROMPT<<<\fP and \fB>>>PROMPT_COUNTER<<<\fP).
  2425. The repeat argument function reads its arguments in prompt mode.  The
  2426. function and all called functions/macros may only use the following
  2427. OCL-elements (some of them are explained in the following chapters):
  2428. .\"{{{  tables of allowed elements
  2429. .KS
  2430. .nI
  2431. .TS
  2432. tab(|);
  2433. l l l.
  2434. .\"{{{  controls
  2435. .T&
  2436. l
  2437. l l.
  2438. controls:
  2439.  \fB>>>IF<<<\fP-\fB>>>fi_name<<<\fP|\fB>>>IF<<<\fP-\fB>>>ELSE<<<\fP-\fB>>>fi_name<<<\fP
  2440.  \fB>>>CASE<<<\fP-\fB>>>DEFAULT<<<\fP-\fB>>>ESAC<<<\fP|\fB>>>LOC<<<\fP
  2441.  \fB>>>WHILE<<<\fP|\fB>>>DO<<<\fP-\fB>>>WHILE<<<\fP
  2442. .\"}}}
  2443.  
  2444. .\"{{{  commands
  2445. .T&
  2446. l
  2447. l l.
  2448. commands:
  2449.  \fB>>>EXIT<<<\fP|\fB>>>MES_EXIT<<<\fP
  2450.  \fB>>>SET_COUNTER<<<\fP|modes from \fB(>>>MULTIKBD<<<\fP \&.\&.\&. \fB)\fP
  2451.  \fB>>>HISTORY<<<\fP|\fB>>>HISTORY_GET<<<\fP
  2452.  \fB>>>O_UNCHANGE<<<\fP
  2453. .\"}}}
  2454.  
  2455. .\"{{{  booleans
  2456. .T&
  2457. l s
  2458. l l
  2459. l s
  2460. l l.
  2461. booleans:
  2462.  \fB>>>NOT<<<\fP
  2463.  \fB>>>AND<<<\fP|\fB>>>OR<<<\fP
  2464.  \fB<\fP \fB<>\fP \fB>\fP|\fB<=\fP \fB=\fP \fB>=\fP
  2465.  \fB>>>TEST_ECHO<<<\fP|\fB>>>TEST_CHANGED<<<\fP
  2466.  \fB>>>LASTMES<<<\fP|\fB>>>TEST_VIEW<<<\fP
  2467.  \fB>>>TEST_AUTO<<<\fP|\fB>>>EDITING<<<\fP
  2468.  \fB>>>TEST_GEN_FOLD<<<\fP|\fB>>>TEST_LANG<<<\fP
  2469.  \fB>>>TEST_OVER<<<\fP|\fB>>>TEST_BEGIN_FOLD<<<\fP
  2470.  \fB>>>TEST_FOLD_LINE<<<\fP|\fB>>>TEST_END_FOLD<<<\fP
  2471.  \fB>>>TEST_FILED<<<\fP|\fB>>>TEST_TEXT<<<\fP
  2472.  \fB>>>TEST_HASH<<<\fP
  2473. .\"}}}
  2474.  
  2475. .\"{{{  terms
  2476. .T&
  2477. l
  2478. l l l.
  2479. terms:
  2480.  \fB>>>SET_ENTER<<<\fP|\fB>>>SET_S_ENTER<<<\fP|\fB>>>FILETYPE<<<\fP
  2481.  numbers|characters|
  2482.  \fB+\fP|\fB\-\fP|\fB*\fP
  2483.  \fB>>>MOD<<<\fP|\fB>>>DIV<<<\fP
  2484. .\"}}}
  2485. .TE
  2486. .In
  2487. .KE
  2488. .\"}}}
  2489. .wA
  2490. keybind does not check if you only use the allowed commands!  Only the
  2491. valid commands in called functions/macros will be executed.  All other
  2492. commands will be ignored, but do not rely on this feature!
  2493. .Ib
  2494. .\"}}}
  2495. .\"{{{  promptoutmacro
  2496. .bI "\fB(>>>PRO_OUT<<<\fP \fIname\fP\fB)\fP"
  2497. .dX >>>PRO_OUT<<<
  2498. The function named \fIname\fP is executed each time prompt mode is finished
  2499. (except the OCL commands \fB>>>PROMPT<<<\fP and \fB>>>PROMPT_COUNTER<<<\fP).  The
  2500. command restrictions for the function are the same as in
  2501. \fB>>>PRO_IN<<<\fP.
  2502. .Ib
  2503. .\"}}}
  2504. .\"{{{  keynotbound
  2505. .bI "\fB(>>>KNBM<<<\fP \fIname\fP\fB)\fP"
  2506. .dX >>>KNBM<<<
  2507. The function named \fIname\fP is executed each time an illegal keysequence
  2508. was entered.  The command restrictions for the function are the same as in
  2509. \fB>>>PRO_IN<<<\fP.
  2510. .Ib
  2511. .\"}}}
  2512. .\"{{{  >>>DEFAUTOSAVE<<<
  2513. .bI "\fB(>>>DEFAUTOSAVE<<<\fP \fIname\fP\fB)\fP"
  2514. .dX >>>DEFAUTOSAVE<<<
  2515. .iX autosave-mode
  2516. If \fB>>>DEFAUTOSAVE<<<\fP is given, the execution of this macro
  2517. replaces the saving of all changed files.
  2518. .Ib
  2519. .\"}}}
  2520. .\"{{{  >>>DEFQUIT<<<
  2521. .bI "\fB(>>>DEFQUIT<<<\fP \fIname\fP\fB)\fP"
  2522. .dX >>>DEFQUIT<<<
  2523. If set, Origami tries to execute \fIname\fP, if Origami got the signal SIGQUIT.
  2524. .Ib
  2525. .\"}}}
  2526. .\"{{{  >>>DEFU1<<<
  2527. .bI "\fB(>>>DEFU1<<<\fP \fIname\fP\fB)\fP"
  2528. .dX >>>DEFU1<<<
  2529. If set, Origami tries to execute \fIname\fP, if Origami got the signal SIGUSR1.
  2530. .Ib
  2531. .\"}}}
  2532. .\"{{{  >>>DEFU2<<<
  2533. .bI "\fB(>>>DEFU2<<<\fP \fIname\fP\fB)\fP"
  2534. .dX >>>DEFU2<<<
  2535. If set, Origami tries to execute \fIname\fP, if Origami got the signal SIGUSR2.
  2536. .Ib
  2537. .\"}}}
  2538. .\"}}}
  2539. .\"{{{  control structures
  2540. .nH 3 "Control structures"
  2541. .LP
  2542. A \fIstatement\fP can be one of the following control structures or
  2543. functions:
  2544. .\"{{{  >>>WHILE<<<
  2545. .bI "\fB>>>WHILE<<<\fP \fIcondition\fP \fB(\fP\fIstatement\fP ... \fB)\fP"
  2546. .dX >>>WHILE<<<
  2547. Prechecked loop, \fIstatement\fP ...  is repeated while the condition is
  2548. true.
  2549. .Ib
  2550. .\"}}}
  2551. .\"{{{  >>>DO<<< >>>WHILE<<<
  2552. .bI "\fB>>>DO<<< (\fP\fIstatement\fP ... \fB) >>>WHILE<<<\fP \fIcondition\fP"
  2553. .dX >>>DO<<<
  2554. .dX >>>WHILE<<<
  2555. Postchecked loop, \fIstatement\fP ...  is repeated until the condition
  2556. is false.
  2557. .Ib
  2558. .\"}}}
  2559. .\"{{{  >>>IF<<< >>>ELSE<<< >>>fi_name<<<
  2560. .bI "\fB>>>IF<<<\fP \fIcondition\fP \fB(\fP\fIstatement\fP ... \fB)\fP [ \fB>>>ELSE<<< (\fP\fIstatement\fP ... \fB)\fP ] \fB>>>fi_name<<<\fP"
  2561. .dX >>>IF<<<
  2562. .dX >>>ELSE<<<
  2563. .dX >>>fi_name<<<
  2564. Conditional statement.  If condition is true, the first statement list
  2565. is executed.  If condition is false, the second statement list, if
  2566. given, is executed.
  2567. .Ib
  2568. .\"}}}
  2569. .\"{{{  >>>CASE<<< >>>ESAC<<<
  2570. .bI "\fB>>>CASE<<< (\fP\fIcondition\fP \fB(\fP\fIstatement\fP ... \fB))\fP ... [ \fB>>>DEFAULT<<< (\fP\fIstatement\fP ... \fB)\fP ] \fB>>>ESAC<<<\fP"
  2571. .dX >>>CASE<<<
  2572. .dX >>>ESAC<<<
  2573. .dX >>>DEFAULT<<<
  2574. Conditional statement.  The block of statements following the first
  2575. conditional expression evaluating to TRUE is executed.  If none of the
  2576. conditions is true, the given default statements are executed.
  2577. .Ib
  2578. .\"}}}
  2579. .\"{{{  >>>REPEAT<<<
  2580. .bI "\fB>>>REPEAT<<<\fP \fIterm\fP \fB(\fP\fIstatement\fP ... \fB)\fP"
  2581. .dX >>>REPEAT<<<
  2582. \fB(\fP\fIstatement\fP ... \fB)\fP is repeated \fIterm\fP times.
  2583. .wA
  2584. old versions of keybind stored the called statements \fIterm\fP times.
  2585. \fIterm\fP had to be a constant!  This new version of keybind generates
  2586. code, which uses an internal OCL-variable to count the loops.  The
  2587. number of repeats need not be a constant!  The repeated statement list is
  2588. \fB>>>NOT<<<\fP called via a subroutine call, so \fB>>>RETURN<<<\fP will
  2589. leave the current function/macro, not only the \fB>>>REPEAT<<<\fP!
  2590. .Ib
  2591. .\"}}}
  2592. .\"{{{  >>>PROMPT<<<
  2593. .bI "\fB>>>PROMPT<<<\fP \fImessage-string\fP"
  2594. .dX >>>PROMPT<<<
  2595. .dX message-string
  2596. Displays \fImessage-string\fP below the status line and waits for
  2597. \fB>>>O_RETURN<<<\fP.  If Origami is in define-macro-mode, the
  2598. \fB>>>O_RETURN<<<\fP will not be stored!  \fImessage-string\fP can be:
  2599. .\"{{{  decription of message-string
  2600. .sI "\fIstring\fP"
  2601. .Is
  2602. .bI "\fB(\fP\fImessage-string-item\fP ... \fB)\fP"
  2603. This list of \fImessage-string-item\fPs can contain more complicated entries.
  2604. They are:
  2605. .\"{{{  string
  2606. .sI "\fIstring\fP"
  2607. .Is
  2608. .\"}}}
  2609. .\"{{{  var
  2610. .bI "\fB>>>COUNTER<<<\fP \fIname\fP"
  2611. This will be replaced by the ASCII-representation of the value of
  2612. OCL-variable \fIname\fP.
  2613. .Ib
  2614. .\"}}}
  2615. .\"{{{  number
  2616. .bI "\fInumber\fP"
  2617. This will be replaced by the ASCII-representation of \fInumber\fP.
  2618. .Ib
  2619. .\"}}}
  2620. .\"{{{  history
  2621. .bI "\fB>>>HISTORY<<<\fP \fIhistory-name\fP"
  2622. .iX >>>HISTORY<<<
  2623. .iX history-name
  2624. .iX >>>HISTORY_GET<<<
  2625. use the text of "\fB>>>HISTORY_GET<<<\fP \fIhistory-name\fP \fB0\fP".
  2626. \fB>>>HISTORY_GET<<<\fP is explained below.
  2627. .Ib
  2628. .\"}}}
  2629. .\"{{{  ori-message
  2630. .bI "\fIorigami-message\fP"
  2631. where \fIorigami-message\fP can be one of the message names declared in
  2632. the Origami sources, file >>>MSG_ENDING<<<.  Empty strings will be substituted for %s
  2633. formatting arguments.  Random values will be used to replace all other
  2634. formatting arguments.
  2635. .Ib
  2636. .\"}}}
  2637. .Ib
  2638. .wA
  2639. Origami cuts long \fImessage-string\fPs after >>>LINELEN<<< characters.
  2640. .\"}}}
  2641. .LP
  2642. Origami displays \fImessage-string\fP and waits until you type a
  2643. \fB>>>O_RETURN<<<\fP on your keyboard.  The given input will
  2644. \fB>>>NOT<<<\fP be interpreted.  Thus, typing the keysequence of a function
  2645. not execute it.
  2646. .pM \fB>>>PROMPT<<<\fP
  2647. .Ib
  2648. .\"}}}
  2649. .\"{{{  >>>MESSAGE<<<
  2650. .bI "\fB>>>MESSAGE<<<\fP \fImessage-string\fP"
  2651. .dX >>>MESSAGE<<<
  2652. .iX message-string
  2653. Like \fB>>>PROMPT<<<\fP, but does not wait for input.
  2654. .LP
  2655. .iX >>>M_O_VAR<<<
  2656. If OCL variable \fB>>>M_O_VAR<<<\fP is not 0, the message will only be printed,
  2657. if command line option \fB\-V\fP is active.
  2658. .Ib
  2659. .\"}}}
  2660. .\"{{{  exits
  2661. .bI "\fB>>>EXIT<<<\fP"
  2662. .dX >>>EXIT<<<
  2663. All running functions are aborted.
  2664. .Ib
  2665. .bI "\fB>>>MES_EXIT<<<\fP \fImessage-string\fP"
  2666. .iX message-string
  2667. .dX >>>MES_EXIT<<<
  2668. Same as >>>EXIT<<<.  \fImessage-string\fP is displayed under the status line.
  2669. .Ib
  2670. .\"}}}
  2671. .\"{{{  >>>RETURN<<<
  2672. .bI "\fB>>>RETURN<<<\fP"
  2673. .dX >>>RETURN<<<
  2674. The currently executed function/macro ends and the caller (keyboard,
  2675. function or macro) resumes execution.
  2676. .Ib
  2677. .\"}}}
  2678. .\"{{{  >>>LOC<<<
  2679. .bI "\fB>>>LOC<<< (\fP\fIname\fP ... \fB) (\fP\fIstatement\fP ... \fB)\fP"
  2680. .dX >>>LOC<<<
  2681. The values of the variables \fIname\fP ...  are saved during the
  2682. execution of \fB(\fP\fIstatement\fP ...  \fB)\fP and restored to their
  2683. original values afterwards.
  2684. .nB
  2685. \fB(\fP\fIstatement\fP ...  \fB)\fP is executed as a subroutine, so that
  2686. using \fB>>>RETURN<<<\fP inside will only leave this block and not
  2687. the current function/macro.  It is allowed to use a empty variable-list
  2688. inside the \fB>>>LOC<<<\fP-statement.  In this case, the statement can be
  2689. used, to use \fB>>>RETURN<<<\fP as a kind of break!
  2690. .Ib
  2691. .\"}}}
  2692. .\"{{{  >>>SHOW_CURSOR<<<
  2693. .bI "\fB>>>SHOW_CURSOR<<<\fP \fIterm\fP"
  2694. .dX >>>SHOW_CURSOR<<<
  2695. The text cursor is displayed and Origami sleeps for \fIterm\fP/10
  2696. seconds.  \fIterm\fP is explained in the following chapter
  2697. \fBVariables\fP.
  2698. .Ib
  2699. .\"}}}
  2700. .\"{{{  origami-commands
  2701. .bI "\fIorigami-command\fP"
  2702. All Origami commands you can use from the keyboard can also be used by
  2703. their names.  \fB>>>O_BREAK<<<\fP stops the function/macro execution and calls
  2704. the >>>DEFAB<<<, if it is defined.
  2705. .Ib
  2706. .\"}}}
  2707. .\"{{{  macros and functions
  2708. .bI "\fImacro-name\fP or \fIfunction-name\fP"
  2709. All macros defined with \fB>>>DEFOP<<<\fP and all functions defined with
  2710. \fB>>>INITMACRO<<<\fP can be used by their name.  Functions defined with
  2711. \fB>>>DEFMACRO<<<\fP or \fB>>>FORWARD<<<\fP can be used, if they do not need any
  2712. arguments.
  2713. .Ib
  2714. .\"}}}
  2715. .\"{{{  function( ... )
  2716. .bI "\fIfunction-name\fP \fB(\fP \fIterm\fP ...\fB)\fP"
  2717. .iX variable
  2718. .iX term
  2719. All functions defined with \fB>>>DEFMACRO<<<\fP or \fB>>>FORWARD<<<\fP can be
  2720. used, if they need some arguments. The number of terms must fit the
  2721. definition of \fIfunction-name\fP. \fIterm\fPs are explained below in
  2722. chapter \fBVariables\fP.
  2723. .Ib
  2724. .\"}}}
  2725. .\"{{{  hooks by their names
  2726. .bI \fIhooks\fP
  2727. If the corresponding hooks are already defined, you can use these names
  2728. to call them (otherwise the statement has \fBno\fP effect):
  2729. .sI \fB>>>B_CHG_MAC<<<\fP
  2730. .Is
  2731. .iX >>>B_CHG_MAC<<<
  2732. .sI \fB>>>DEFAUTO<<<\fP
  2733. .Is
  2734. .iX >>>DEFAUTO<<<
  2735. .sI \fB>>>DEFAB<<<\fP
  2736. .Is
  2737. .iX >>>DEFAB<<<
  2738. .sI \fB>>>VMAC<<<\fP
  2739. .Is
  2740. .iX >>>VMAC<<<
  2741. .sI \fB>>>PRO_IN<<<\fP
  2742. .Is
  2743. .iX >>>PRO_IN<<<
  2744. .sI \fB>>>PRO_OUT<<<\fP
  2745. .Is
  2746. .iX >>>PRO_OUT<<<
  2747. .sI \fB>>>KNBM<<<\fP
  2748. .Is
  2749. .iX >>>KNBM<<<
  2750. .sI \fB>>>DEFAUTOSAVE<<<\fP
  2751. .Is
  2752. .iX >>>DEFAUTOSAVE<<<
  2753. .sI \fB>>>DEFQUIT<<<\fP
  2754. .Is
  2755. .iX >>>DEFQUIT<<<
  2756. .sI \fB>>>DEFU1<<<\fP
  2757. .Is
  2758. .iX >>>DEFU1<<<
  2759. .sI \fB>>>DEFU2<<<\fP
  2760. .Is
  2761. .iX >>>DEFU2<<<
  2762. .Ib
  2763. .\"}}}
  2764. .\"{{{  >>>INSERT_ASCII<<<
  2765. .bI "\fB>>>INSERT_ASCII<<<\fP \fIorigami-message\fP"
  2766. .dX >>>INSERT_ASCII<<<
  2767. .iX origami-message
  2768. Put the string for \fIorigami-message\fP in the text,
  2769. where \fIorigami-message\fP can be one of the message names declared in
  2770. the Origami sources, file >>>MSG_ENDING<<<.
  2771. .Ib
  2772. .\"}}}
  2773. .\"{{{  strings
  2774. .bI "\fIstrings\fP"
  2775. Normal text can be used.  The syntax is:
  2776. .bI "\fB""\fP\fItext\fP"
  2777. \fItext\fP can be a any string not containing <space>, \fB"\fP or \fB)\fP.
  2778. .Ib
  2779. .sI "\fB""\fP<space> to use <space>"
  2780. .Is
  2781. .sI "\fB"")\fP to use \fB)\fP"
  2782. .Is
  2783. .sI "\fB""""\fP to use \fB""\fP"
  2784. .Is
  2785. .wA
  2786. if you use Origami to edit an OCL file, \fB"\fP<space> should not be the
  2787. last statement of a line because Origami deletes all spaces at end of
  2788. line.  The problem can be circumvented by appending a comment to the
  2789. line.
  2790. .Ib
  2791. .\"}}}
  2792. .\"}}}
  2793. .\"{{{  variables
  2794. .\"{{{  types
  2795. .nH 3 "Variables Types"
  2796. .dX variable
  2797. .LP
  2798. OCL knows 3 types of variables:
  2799. .\"{{{  global ints
  2800. .nH 4 "global integer variables"
  2801. .iX >>>DEFVAR<<<
  2802. .LP
  2803. These variables have to be declared with:
  2804. .sI "\fB(>>>DEFVAR<<< (\fP\fIvariablename\fP .. \fB))\fP"
  2805. .Is
  2806. .dX >>>DEFVAR<<<
  2807. .LP
  2808. The following global integer variables are always predefined, their values
  2809. are set by Origami automatically:
  2810. .\"{{{  screen data
  2811. .bI "\fB>>>SCR_H<<<\fP, \fB>>>SCR_W<<<\fP, \fB>>>CURSOR_LEVEL<<<\fP, \fB>>>SCR_W_O<<<\fP, \fB>>>SCR_H_O<<<\fP"
  2812. .dX >>>SCR_H<<<
  2813. .dX >>>SCR_H_O<<<
  2814. .dX >>>SCR_W<<<
  2815. .dX >>>SCR_W_O<<<
  2816. .dX >>>CURSOR_LEVEL<<<
  2817. The three OCL variables \fB>>>SCR_H<<<\fP, \fB>>>SCR_W<<<\fP and \fB>>>CURSOR_LEVEL<<<\fP are set
  2818. to size of the text editing area of the current buffer on the screen and
  2819. the number of the line, the cursor is in (top of buffer buffer window =
  2820. 1).  The variables \fB>>>SCR_W_O<<<\fP and \fB>>>SCR_H_O<<<\fP contain the offsets of
  2821. the current buffer window on the screen.
  2822. .Ib
  2823. .\"}}}
  2824. .\"{{{  buffer data
  2825. .bI "\fB>>>C_B_VAR<<<\fP, \fB>>>C_BI_VAR<<<\fP, \fB>>>U_B_VAR<<<\fP, \fB>>>M_B_VAR<<<\fP"
  2826. .iX buffer
  2827. .dX >>>C_B_VAR<<<
  2828. .dX >>>C_BI_VAR<<<
  2829. .dX >>>U_B_VAR<<<
  2830. .dX >>>M_B_VAR<<<
  2831. The variable \fB>>>U_B_VAR<<<\fP shows the number of used buffers.
  2832. .br
  2833. \fB>>>C_B_VAR<<<\fP shows the number of the active (current) buffer.  This
  2834. number is not a fixed name, but represents the position of this buffer
  2835. in the internal list of used buffers.  It might change, if new buffers
  2836. are opened or existing buffers are deleted!
  2837. .br
  2838. The OCL-variable \fB>>>C_BI_VAR<<<\fP contains a number, representing the
  2839. creation time of the buffer. During the editing session, this will not
  2840. change for a buffer.
  2841. .br
  2842. \fB>>>M_B_VAR<<<\fP contains the number of buffers, which are used to edit the
  2843. file in the current buffer.
  2844. .Ib
  2845. .\"}}}
  2846. .\"{{{  ocl-arguments
  2847. .bI "\fB>>>OCL_ARG_V<<<\fP"
  2848. .dX >>>OCL_ARG_V<<<
  2849. .iX >>>O_SHELL_COMMAND<<<
  2850. .iX >>>O_SHELL<<<
  2851. .iX >>>O_FILTER_BUFFER<<<
  2852. .iX >>>O_PIPE_TO_COMMAND<<<
  2853. .iX >>>O_PIPE_FROM_COMMAND<<<
  2854. .iX >>>O_FILE_C<<<
  2855. .iX >>>O_D_AUTO_SAVE<<<
  2856. .iX >>>O_D_TIME<<<
  2857. .iX view-mode
  2858. The OCL variable \fB>>>OCL_ARG_V<<<\fP can be set by using the command
  2859. line option \fB\-O\fP\fIvalue\fP.  This variable is also used, to store
  2860. the exit status for \fB>>>O_SHELL_COMMAND<<<\fP, \fB>>>O_SHELL<<<\fP,
  2861. \fB>>>O_FILTER_BUFFER<<<\fP, \fB>>>O_PIPE_TO_COMMAND<<<\fP and
  2862. \fB>>>O_PIPE_FROM_COMMAND<<<\fP.
  2863. \fB>>>O_FILE_C<<<\fP stores the number of added characters in it.
  2864. \fB>>>O_D_TIME<<<\fP stores the old time mode in it.
  2865. \fB>>>O_D_AUTO_SAVE<<<\fP returns information about the old auto save
  2866. interval in this variable. \fB>>>OCL_ARG_V<<<\fP is set to the OCL
  2867. command token, which cannot be executed while view mode is active.
  2868. .Ib
  2869. .\"}}}
  2870. .\"{{{  >>>M_O_VAR<<<
  2871. .bI "\fB>>>M_O_VAR<<<\fP"
  2872. .dX >>>M_O_VAR<<<
  2873. .iX >>>O_OPEN_BUFFER<<<
  2874. .iX >>>O_OPEN_LIST_BUFFER<<<
  2875. .iX >>>O_OPEN_W_BUFFER<<<
  2876. .iX >>>O_OPEN_LIST_W_BUFFER<<<
  2877. .iX >>>O_CREATE_FOLD<<<
  2878. .iX >>>O_HELP<<<
  2879. .iX >>>MESSAGE<<<
  2880. .iX >>>O_REFRESH<<<
  2881. .iX >>>O_A_AUTO_SAVE<<<
  2882. .iX >>>O_DSP<<<
  2883. \fB>>>M_O_VAR<<<\fP changes the semantics of Origami/OCL-functions:
  2884. .TS
  2885. tab(|);
  2886. l l.
  2887. command|modification/effect
  2888. \fB>>>O_CREATE_FOLD<<<\fP|switch on highlighting mode
  2889. \fB>>>O_OPEN_BUFFER<<<\fP|place/file
  2890. \fB>>>O_OPEN_LIST_BUFFER<<<\fP|place/file
  2891. \fB>>>O_OPEN_W_BUFFER<<<\fP|place/file
  2892. \fB>>>O_OPEN_LIST_W_BUFFER<<<\fP|place/file
  2893. \fB>>>O_HELP<<<\fP|show \fB@>>>STARTREF_NO<<<\fP help
  2894. \fB>>>MESSAGE<<<\fP|print only in verbose mode
  2895. \fB>>>O_REFRESH<<<\fP|screen invalid
  2896. \fB>>>O_A_AUTO_SAVE<<<\fP|delay in seconds
  2897. \fB>>>O_DSP<<<\fP|do not stay in menu
  2898. .TE
  2899. .Ib
  2900. .\"}}}
  2901. .\"{{{  >>>K_C_VAR<<<
  2902. .bI "\fB>>>K_C_VAR<<<\fP"
  2903. .dX >>>K_C_VAR<<<
  2904. \fB>>>K_C_VAR<<<\fP contains the number of keyboard inputs, Origami read.
  2905. .Ib
  2906. .\"}}}
  2907. .\"{{{  >>>KI_C_VAR<<<
  2908. .bI "\fB>>>KI_C_VAR<<<\fP"
  2909. .dX >>>KI_C_VAR<<<
  2910. \fB>>>KI_C_VAR<<<\fP contains the number of lines, killed by
  2911. \fB>>>O_PICK<<<\fP or \fB>>>O_COPY_PICK<<<\fP.
  2912. .Ib
  2913. .\"}}}
  2914. .\"{{{  >>>M_C_VAR<<<
  2915. .bI "\fB>>>M_C_VAR<<<\fP"
  2916. .dX >>>M_C_VAR<<<
  2917. \fB>>>M_C_VAR<<<\fP contains \fB0\fP or \fB1\fP, depending on the usage
  2918. of the move-buffer.
  2919. .Ib
  2920. .\"}}}
  2921. .\"{{{  >>>VAR_PATH_SEP<<<
  2922. .bI "\fB>>>VAR_PATH_SEP<<<\fP"
  2923. .dX >>>VAR_PATH_SEP<<<
  2924. \fB>>>VAR_PATH_SEP<<<\fP is initialized at startup with the operations
  2925. systems path separator (usually '\fB/\fP').
  2926. .Ib
  2927. .\"}}}
  2928. .\"{{{  file-number
  2929. .bI "\fB>>>F_N_VAR<<<\fP"
  2930. .dX >>>F_N_VAR<<<
  2931. \fB>>>F_N_VAR<<<\fP is set to the position of the current file in the list
  2932. of edited files.  The list of edited files uses \fB0\fP.
  2933. .Ib
  2934. .\"}}}
  2935. .\"{{{  >>>DIRED_VAR<<<
  2936. .bI "\fB>>>DIRED_VAR<<<\fP"
  2937. .dX >>>DIRED_VAR<<<
  2938. \fB>>>DIRED_VAR<<<\fP controls, whether directories are displayed using
  2939. \fBdirfold \-l\fP.
  2940. .Ib
  2941. .\"}}}
  2942. .\"{{{  >>>FORCE_SH<<<
  2943. .bI "\fB>>>FORCE_SH<<<\fP"
  2944. .dX >>>FORCE_SH<<<
  2945. If \fB>>>FORCE_SH<<<\fP is not \fB0\fP, \fB>>>BOURNE_SHELL<<<\fP is used
  2946. instead of the value of environment variable \fB>>>SHELL<<<\fP.
  2947. .Ib
  2948. .\"}}}
  2949. .\"}}}
  2950. .\"{{{  global integer arrays
  2951. .nH 4 "global integer arrays"
  2952. .iX >>>DEFVAR<<<
  2953. .LP
  2954. These also have to be declared with \fB>>>DEFVAR<<<\fP:
  2955. .bI "\fB(>>>DEFVAR<<<\fP \fIdimension\fP \fB(\fP\fIvariablename\fP ... \fB))\fP"
  2956. .dX >>>DEFVAR<<<
  2957. All given \fIvariablename\fP are declared as fields of \fIdimension\fP
  2958. integer variables.  \fIdimension\fP is a non negative number constant.
  2959. .Ib
  2960. .LP
  2961. The following array is always defined:
  2962. .\"{{{  ocl-arg-field
  2963. .bI "\fB>>>OCL_ARG_RECORD_V<<<\fP"
  2964. .dX >>>OCL_ARG_RECORD_V<<<
  2965. .iX >>>OCL_ARG_V<<<
  2966. The OCL variable \fB>>>OCL_ARG_RECORD_V<<<\fP is defined with dimension
  2967. >>>DIM_OCL_CMD_OPTS<<<.  \fB>>>OCL_ARG_RECORD_V<<<(0)\fP and
  2968. \fB>>>OCL_ARG_V<<<\fP are the same variable!
  2969. \fB>>>OCL_ARG_RECORD_V<<<(\fP\fIx\fP\fB)\fP,0<\fIx\fP<>>>DIM_OCL_CMD_OPTS<<<
  2970. are initialized with \fB0\fP, unless \fB\-O>\fP\fIx\fP is used to overwrite.
  2971. .Ib
  2972. .\"}}}
  2973. .\"}}}
  2974. .\"{{{  auto-vars
  2975. .nH 4 "parameter variables"
  2976. .iX >>>DEFMACRO<<<
  2977. .LP
  2978. Variables, declared as arguments for functions, are always local.  Each
  2979. function call will use another set of variables.
  2980. .\"}}}
  2981. .\"}}}
  2982. .\"{{{  variable initialization
  2983. .nH 3 "Variable Initialization"
  2984. .LP
  2985. The variables are known for all functions/macros.  They are initialized
  2986. by 0 at startup.  The variable \fB>>>OCL_ARG_V<<<\fP is initialized with
  2987. \fB\-1\fP, if no \fB\-O\fP option is given.  Otherwise it is set as the
  2988. \fB\-O\fP options determines:
  2989. .\"{{{  <x copy from var
  2990. .bI "\fB\-O\fP [\fB>\fP\fIoff\fP]<\fIvalue\fP"
  2991. Change the value of OCL variable \fB>>>OCL_ARG_V<<<\fP to the one of
  2992. \fB>>>OCL_ARG_RECORD_V<<<(\fP\fIvalue\fP.\fB)\fP.  If \fB>\fP\fIoff\fP
  2993. is used, change \fB>>>OCL_ARG_RECORD_V<<<(\fP\fIoff\fP\fB)\fP instead.
  2994. .Ib
  2995. .\"}}}
  2996. .\"{{{  =x set to val
  2997. .bI "\fB\-O\fP  [\fB>\fP\fIoff\fP][\fB=\fP]\fIvalue\fP"
  2998. Change the value of OCL variable \fB>>>OCL_ARG_V<<<\fP to \fIvalue\fP.
  2999. If \fB>\fP\fIoff\fP is used, change
  3000. \fB>>>OCL_ARG_RECORD_V<<<(\fP\fIoff\fP\fB)\fP instead.
  3001. .Ib
  3002. .\"}}}
  3003. .\"{{{  |x or with val
  3004. .bI "\fB\-O \fP[\fB>\fP\fIoff\fP]\fB|\fP\fIvalue\fP"
  3005. Bitwise-Or the value of OCL variable \fB>>>OCL_ARG_V<<<\fP with
  3006. \fIvalue\fP.  If \fB>\fP\fIoff\fP is used, change
  3007. \fB>>>OCL_ARG_RECORD_V<<<(\fP\fIoff\fP\fB)\fP instead.
  3008. .Ib
  3009. .\"}}}
  3010. .\"{{{  &x and with val
  3011. .bI "\fB\-O \fP[\fB>\fP\fIoff\fP]\fB&\fP\fIvalue\fP"
  3012. Bitwise-And the value of OCL variable \fB>>>OCL_ARG_V<<<\fP with
  3013. \fIvalue\fP.  If \fB>\fP\fIoff\fP is used, change
  3014. \fB>>>OCL_ARG_RECORD_V<<<(\fP\fIoff\fP\fB)\fP instead.
  3015. .Ib
  3016. .\"}}}
  3017. .\"{{{  ^x xor with val
  3018. .bI "\fB\-O \fP[\fB>\fP\fIoff\fP]\fB^\fP\fIvalue\fP"
  3019. Bitwise-XOr the value of OCL variable \fB>>>OCL_ARG_V<<<\fP with
  3020. \fIvalue\fP.  If \fB>\fP\fIoff\fP is used, change
  3021. \fB>>>OCL_ARG_RECORD_V<<<(\fP\fIoff\fP\fB)\fP instead.
  3022. .Ib
  3023. .\"}}}
  3024. .\"{{{  +x add with val
  3025. .bI "\fB\-O \fP[\fB>\fP\fIoff\fP]\fB+\fP\fIvalue\fP"
  3026. Increment the value of OCL variable \fB>>>OCL_ARG_V<<<\fP with
  3027. \fIvalue\fP.  If \fB>\fP\fIoff\fP is used, change
  3028. \fB>>>OCL_ARG_RECORD_V<<<(\fP\fIoff\fP\fB)\fP instead.
  3029. .Ib
  3030. .\"}}}
  3031. .\"{{{  aliased
  3032. .bI "\fB-O\fP \fIname\fP[\fB=\fP]\fInumber\fP"
  3033. If \fIname\fP is defined as a command line alias in the current >>>RC_ENDING<<< file,
  3034. the corresponding initialization will be done. If \fB=\fP\fInumber\fP is
  3035. used, in the above mentioned options \fB?\fP can be used to replace
  3036. \fIvalue\fP by the command line argument.
  3037. .LP
  3038. In aliased commands, you can use another command:
  3039. .bI "\fB@\fP"
  3040. .iX history
  3041. .iX >>>ARG_HIST<<<
  3042. .dX @
  3043. A string given with \fB=\fP will be added to the predefined history
  3044. \fB>>>ARG_HIST<<<\fP.  A empty string will be stored as a single space.
  3045. .Ib
  3046. .Ib
  3047. .\"}}}
  3048. .wA
  3049. there will be no compile time syntax check for the given aliases!
  3050. .\"}}}
  3051. .\"{{{  usage
  3052. .nH 3 "Variables Usage"
  3053. .dX variable
  3054. .\"{{{  terms
  3055. .nH 4 "Terms"
  3056. .LP
  3057. .dX term
  3058. Variables can be used to build expressions.  The syntax for these
  3059. expressions, called \fIterm\fP in this document, is:
  3060. .\"{{{  expr
  3061. .dX +
  3062. .dX \-
  3063. .dX *
  3064. .dX >>>DIV<<<
  3065. .dX >>>MOD<<<
  3066. .bI "\fIbasic\fP | \fB\-\fP\fIterm\fP | [\fB+\fP|\fB\-\fP|\fB*\fP|\fB>>>DIV<<<\fP|\fB>>>MOD<<<\fP]\fB(\fP\fIterm\fP \fIterm\fP [\fIterm\fP .. ] \fB)\fP"
  3067. A \fIterm\fP can be a \fIbasic\fP term or a compound term.
  3068. .Ib
  3069. .\"}}}
  3070. .LP
  3071. OCL's \fIbasic\fP terms are:
  3072. .\"{{{  true
  3073. .bI \fB>>>TRUE_SYM<<<\fP
  3074. .iX >>>TRUE_SYM<<<
  3075. evaluates to 1.
  3076. .Ib
  3077. .\"}}}
  3078. .\"{{{  false
  3079. .bI \fB>>>FALSE_SYM<<<\fP
  3080. .iX >>>FALSE_SYM<<<
  3081. evaluates to 0.
  3082. .Ib
  3083. .\"}}}
  3084. .\"{{{  number
  3085. .bI "\fInumber\fP"
  3086. a signed or unsigned integer constant.
  3087. .Ib
  3088. .\"}}}
  3089. .\"{{{  char
  3090. .hI
  3091. \fB"\fP\fIchar\fP
  3092. .br
  3093. \fBC\-\fP\fIx\fP
  3094. .tI
  3095. the integer coding of the given character.
  3096. .wA
  3097. the \fB"\fP\fIchar\fP character is read as a string with length 1.  So
  3098. \fIchar\fP must be followed by a space!
  3099. .eI
  3100. .\"}}}
  3101. .\"{{{  name
  3102. .bI "\fIname\fP"
  3103. a variable
  3104. .Ib
  3105. .\"}}}
  3106. .\"{{{  name(x)
  3107. .bI "\fIname (\fP \fIterm\fP \fB)\fP"
  3108. the \fIterm\fP's entry in array \fIname\fP (index: 0,1,.. )
  3109. .Ib
  3110. .\"}}}
  3111. .\"{{{  >>>EVAL<<<
  3112. .bI "\fB>>>EVAL<<< (\fP\fIstatement\fP ... \fB)\fP"
  3113. .dX >>>EVAL<<<
  3114. .iX >>>RETVAL<<<
  3115. "\fB(\fP\fIstatement\fP ...  \fB)\fP" is called via subroutine call.  If
  3116. it is ended with "\fB>>>RETVAL<<<\fP \fIterm\fP", this value
  3117. is used.  Otherwise a random value is used as result of this expression.
  3118. .Ib
  3119. .\"}}}
  3120. .\"{{{  >>>PRE<<<
  3121. .bI "\fB>>>PRE<<< (\fP\fIstatement\fP ... \fB)\fP \fIterm\fP"
  3122. .dX >>>PRE<<<
  3123. execute \fB(\fP\fIstatement\fP ...  \fB)\fP and use the new values in
  3124. the evaluation of \fIterm\fP.
  3125. .Ib
  3126. .\"}}}
  3127. .\"{{{  >>>COUNTER<<<
  3128. .bI "\fB>>>COUNTER<<<\fP \fIcondition\fP"
  3129. .dX >>>COUNTER<<<
  3130. is 1, if the boolean expression evaluates to TRUE, otherwise 0.
  3131. .Ib
  3132. .\"}}}
  3133. .\"{{{  >>>READ_REPEAT<<<
  3134. .bI "\fB>>>READ_REPEAT<<<\fP"
  3135. .dX >>>READ_REPEAT<<<
  3136. .iX argument
  3137. .iX set-argument
  3138. Return the value accumulated by \fBset-argument-x\fP.  The repeated
  3139. execution of the command will be stopped. If \fBset-argument-x\fP was not used,
  3140. \fB\-1\fP will be returned.
  3141. .Ib
  3142. .\"}}}
  3143. .\"{{{  >>>STORE_CHAR<<<
  3144. .bI "\fB>>>STORE_CHAR<<<\fP"
  3145. .dX >>>STORE_CHAR<<<
  3146. Return the ASCII value of the character under the cursor.
  3147. .Ib
  3148. .\"}}}
  3149. .\"{{{  >>>FOLD_SL<<<
  3150. .bI \fB>>>FOLD_SL<<<\fP
  3151. .dX >>>FOLD_SL<<<
  3152. Returns the length of the fold comment start string (2, if language
  3153. \fB>>>LANG_Inmos<<<\fP is active).
  3154. .Ib
  3155. .\"}}}
  3156. .\"{{{  >>>FOLD_S<<<
  3157. .bI "\fB>>>FOLD_S<<<\fP \fIterm\fP"
  3158. .dX >>>FOLD_S<<<
  3159. Returns the \fIterm\fPs character of the fold comment start string
  3160. (which is replaced by '\fB--\fP', if language >>>LANG_Inmos<<< is active). 0 is the
  3161. first character.
  3162. .Ib
  3163. .\"}}}
  3164. .\"{{{  >>>FOLD_EL<<<
  3165. .bI \fB>>>FOLD_EL<<<\fP
  3166. .dX >>>FOLD_EL<<<
  3167. Returns the length of the fold comment end string (0, if language
  3168. \fB>>>LANG_Inmos<<<\fP is active).
  3169. .Ib
  3170. .\"}}}
  3171. .\"{{{  >>>FOLD_E<<<
  3172. .bI "\fB>>>FOLD_E<<<\fP \fIterm\fP"
  3173. .dX >>>FOLD_E<<<
  3174. Returns the \fIterm\fPs character of the fold comment end string
  3175. (which is replaced by '\fB\fP', if language >>>LANG_Inmos<<< is active). 0 is the
  3176. first character.
  3177. .Ib
  3178. .\"}}}
  3179. .\"{{{  >>>FOLD_M1<<<...
  3180. .hI
  3181. \fB>>>FOLD_M1<<<\fP \fIterm\fP
  3182. .br
  3183. \fB>>>FOLD_M2<<<\fP \fIterm\fP
  3184. .br
  3185. \fB>>>FOLD_M3<<<\fP \fIterm\fP
  3186. .br
  3187. \fB>>>FOLD_M4<<<\fP \fIterm\fP
  3188. .tI
  3189. .dX >>>FOLD_M1<<<
  3190. .dX >>>FOLD_M2<<<
  3191. .dX >>>FOLD_M3<<<
  3192. .dX >>>FOLD_M4<<<
  3193. Like \fB>>>FOLD_S<<<\fP, but uses the fold mark strings.
  3194. .eI
  3195. .\"}}}
  3196. .\"{{{  >>>FILETYPE<<<
  3197. .bI "\fB>>>FILETYPE<<<\fP"
  3198. .dX >>>FILETYPE<<<
  3199. Return a coding for the type of the current editor file.
  3200. .sI "0 for regular file"
  3201. .Is
  3202. .sI "1 for directory"
  3203. .Is
  3204. .sI "\-1 for list of edited files"
  3205. .Is
  3206. .Ib
  3207. .\"}}}
  3208. .\"{{{  >>>SET_ENTER<<<
  3209. .bI "\fB>>>SET_ENTER<<<\fP"
  3210. .dX >>>SET_ENTER<<<
  3211. Return number of entered folds.
  3212. .Ib
  3213. .\"}}}
  3214. .\"{{{  >>>SET_S_ENTER<<<
  3215. .bI "\fB>>>SET_S_ENTER<<<\fP"
  3216. .dX >>>SET_S_ENTER<<<
  3217. Return the number of leading spaces hidden by entering folds.
  3218. .Ib
  3219. .\"}}}
  3220. .\"{{{  >>>STORE_Y<<<
  3221. .bI "\fB>>>STORE_Y<<<\fP"
  3222. .dX >>>STORE_Y<<<
  3223. Return the current line number.
  3224. .Ib
  3225. .\"}}}
  3226. .\"{{{  >>>STORE_X<<<
  3227. .bI "\fB>>>STORE_X<<<\fP"
  3228. .dX >>>STORE_X<<<
  3229. Return the x-position of the cursor.  1 is first displayed character.
  3230. This may be not the first character on that text line if you have
  3231. entered indented folds.
  3232. .Ib
  3233. .\"}}}
  3234. .\"{{{  >>>DECODE_BUFFER<<<
  3235. .bI "\fB>>>DECODE_BUFFER<<<\fP \fIterm-x term-y\fP"
  3236. .dX >>>DECODE_BUFFER<<<
  3237. Return the buffer number, using the screen position (not buffer
  3238. position) \fIterm-x\fP/\fIterm-y\fP.  If the position does not belong to
  3239. a buffer, 0 is returned.
  3240. .Ib
  3241. .\"}}}
  3242. .\"{{{  >>>STORE_MARK<<<
  3243. .bI "\fB>>>STORE_MARK<<<\fP"
  3244. .dX >>>STORE_MARK<<<
  3245. .iX >>>GOTO_MARK<<<
  3246. Return a coding of the current line.  \fB>>>GOTO_MARK<<<\fP can use this
  3247. value to reach the line, even if the line has been moved in the text.
  3248. .Ib
  3249. .\"}}}
  3250. .\"{{{  origami commands
  3251. .bI "\fBorigami functions\fP"
  3252. All Origami commands can be used in terms.  This is used to set variables
  3253. with values used in \fB>>>INSERT_ASCII<<<\fP.
  3254. .Ib
  3255. .\"}}}
  3256. .LP
  3257. \fIop\fP\fB(\fP\fIe1 e2 e3\fP .. \fB)\fP is evaluated like
  3258. \fIop\fP\fB(\fP\fIop\fP\fB(\fP\fIe1 e2\fP\fB)\fP \fIe3\fP .. \fB)\fP.
  3259. .wA
  3260. The code optimizer (option \fB\-O\fP) modifies only the generated
  3261. OCL-assembler.  It cannot optimize the structure of terms!  Play with
  3262. the expressions and use \fBviewrc\fP if you need fast/short
  3263. functions/macros.
  3264. .\"}}}
  3265. .\"{{{  statements
  3266. .nH 4 "Variable statements"
  3267. .LP
  3268. The following functions deal with variables/terms and can be used in the
  3269. same way like the above mentioned statements:
  3270. .\"{{{  >>>PROMPT_COUNTER<<<
  3271. .bI "\fB>>>PROMPT_COUNTER<<<\fP \fIname message-string\fP"
  3272. .iX message-string
  3273. .dX >>>PROMPT_COUNTER<<<
  3274. Prompts \fImessage-string\fP below the status line and reads the new value for
  3275. \fIname\fP from keyboard.  Input \fIy\fP sets it to 1, \fIn\fP sets it
  3276. to 0.  All other inputs have to be decimals or a simple
  3277. >>>O_RETURN<<<.
  3278. .nB
  3279. This command does not support the full editing possibilities, you can
  3280. use with normal prompts.  Only the following commands are allowed:
  3281. .iX >>>O_DELETE<<<
  3282. .iX >>>O_RETURN<<<
  3283. .TS
  3284. tab(|);
  3285. l.
  3286. \fB>>>O_DELETE<<<\fP
  3287. \fB>>>O_RETURN<<<\fP
  3288. normal text characters
  3289. .TE
  3290. .pM \fB>>>PROMPT_COUNTER<<<\fP
  3291. .Ib
  3292. .\"}}}
  3293. .\"{{{  >>>PROMPT_CHAR<<<
  3294. .bI "\fB>>>PROMPT_CHAR<<<\fP \fIname message-string\fP"
  3295. .iX message-string
  3296. .dX >>>PROMPT_CHAR<<<
  3297. Same as \fB>>>PROMPT_COUNTER<<<\fP, but the counter \fIname\fP is set to the
  3298. ASCII-value of the next pressed key.  The value is undefined, if the
  3299. pressed key is bound to a user defined or predefined function.  The
  3300. given input will \fB>>>NOT<<<\fP be interpreted.  So a given function will not
  3301. be executed!
  3302. .pM \fB>>>PROMPT_CHAR<<<\fP
  3303. .Ib
  3304. .\"}}}
  3305. .\"{{{  >>>MENU<<<
  3306. .bI "\fB>>>MENU<<<\fP \fIname message-string\fP"
  3307. .iX message-string
  3308. .dX >>>MENU<<<
  3309. Display \fImessage-string\fP as a menu and ask for the whished item.
  3310. Items are the space separated textparts in \fImessage-string\fP.  You
  3311. can choose the items by typing the first character or by moving with
  3312. \fB>>>O_LEFT<<<\fP and \fB>>>O_RIGHT<<<\fP.  The currently chosen item is
  3313. displayed inverse (or trailing \fB>>>CURR_MARK<<<\fP, if inverse is not
  3314. possible).  The first chosen item is given by \fIname\fP (or 0, if
  3315. \fIname\fP is not in the correct range).  \fIname\fP is set to the
  3316. number of the chosen item (0..).
  3317. .LP
  3318. Leading spaces in front of the prompt will be cut.  \fImessage-string\fP
  3319. may not use characters, which are displayed with more than one character
  3320. on the screen (ctrl-chars and tab)!  If the first character of an item
  3321. is \fB>>>SPACE_CHAR<<<\fP, it will be replaced by \fB>>>SPACE<<<\fP in the
  3322. menu and the item asks for the space-character.  If the menu string is
  3323. to long for the current screen, it will be cut at the left and/or right
  3324. end and marked as a long edit line.
  3325. .pM \fB>>>MENU<<<\fP
  3326. .Ib
  3327. .\"}}}
  3328. .\"{{{  >>>GOTO_BUFFER<<<
  3329. .bI "\fB>>>GOTO_BUFFER<<<\fP \fIterm\fP"
  3330. .dX >>>GOTO_BUFFER<<<
  3331. .iX buffer
  3332. .iX >>>C_B_VAR<<<
  3333. Switch to buffer \fIterm\fP in the list of used buffers, the first one
  3334. is 1.  Uses the order from \fB>>>C_B_VAR<<<\fP.
  3335. .Ib
  3336. .\"}}}
  3337. .\"{{{  >>>GOTO_BUFFER_ID<<<
  3338. .bI "\fB>>>GOTO_BUFFER_ID<<<\fP \fIterm\fP"
  3339. .dX >>>GOTO_BUFFER_ID<<<
  3340. .iX buffer
  3341. .iX >>>C_BI_VAR<<<
  3342. Switch to the buffer with \fB>>>C_BI_VAR<<<\fP is \fIterm\fP.  The first one is 0.
  3343. .Ib
  3344. .\"}}}
  3345. .\"{{{  >>>GOTO_COUNTER<<<
  3346. .bI "\fB>>>GOTO_COUNTER<<<\fP \fIterm\fP"
  3347. .dX >>>GOTO_COUNTER<<<
  3348. Move the cursor on x-position \fIterm\fP.  1 is the first displayed
  3349. character.  If you enter a indented fold, position 1 is not the first
  3350. character on that line.
  3351. .Ib
  3352. .\"}}}
  3353. .\"{{{  goto-counter
  3354. .bI "\fBgoto-counter\fP \fIterm\fP"
  3355. .dX goto-counter
  3356. Same as above.
  3357. .Ib
  3358. .\"}}}
  3359. .\"{{{  >>>GOTO_Y<<<
  3360. .bI "\fB>>>GOTO_Y<<<\fP \fIterm\fP"
  3361. .dX >>>GOTO_Y<<<
  3362. Like \fB>>>O_GOTO_LINE<<<\fP.  The line number is the value of the expression.
  3363. .wA
  3364. Origami exits entered folds and moves to the given position.
  3365. .lC
  3366. .Ib
  3367. .\"}}}
  3368. .\"{{{  >>>GOTO_MARK<<<
  3369. .bI "\fB>>>GOTO_MARK<<<\fP \fIterm\fP"
  3370. .dX >>>GOTO_MARK<<<
  3371. .iX >>>GOTO_Y<<<
  3372. .iX >>>STORE_MARK<<<
  3373. .iX >>>M_O_VAR<<<
  3374. Like \fB>>>GOTO_Y<<<\fP, but uses the line coding, given by a
  3375. \fB>>>STORE_MARK<<<\fP statement, to reach the line directly.  The line
  3376. will be found, even if it has been moved inside the text.  Invalid codes
  3377. will be handled as if the last line has been marked.
  3378. .LP
  3379. If OCL varoable \fB>>>M_O_VAR<<<\fP is not \fB0\fP, and the cursor is on
  3380. the destination line, the command will be ignored!
  3381. .wA
  3382. Origami exits entered folds and moves to the given position.
  3383. .wA
  3384. While a marked line is inside \fBkill\-\fP, \fBmove\-\fP or
  3385. \fBdelete\-buffer\fP, the mark is invalid.  At the time, these lines
  3386. appear in the text again, the marks become valid again.
  3387. .wA
  3388. Due to memory management of origami and its reusage of memory, the
  3389. handling of marks in the following circumstances is not defined (invalid
  3390. marks or marks to random lines!):
  3391. .sI "changing the edit file of an buffer"
  3392. .Is
  3393. .sI "deleting more than >>>UNDEL_LINES<<< lines, and creating new text lines"
  3394. .Is
  3395. .lC
  3396. .Ib
  3397. .\"}}}
  3398. .\"{{{  >>>COUNTER<<<
  3399. .bI "\fB>>>COUNTER<<<\fP \fIterm\fP"
  3400. .dX >>>COUNTER<<<
  3401. The value of the expression is returned as ASCII-text.
  3402. .Ib
  3403. .\"}}}
  3404. .\"{{{  >>>INSERT_ASCII<<<
  3405. .bI "\fB>>>INSERT_ASCII<<<\fP \fIterm\fP"
  3406. .dX >>>INSERT_ASCII<<<
  3407. Insert the character with ASCII-code given by the expression into the
  3408. input stream.  There is no check whether the given value of name is a
  3409. correct ascii value.  Do it yourself!
  3410. .LP
  3411. This command can also be used, to put internal OCL-tokens into the token
  3412. stream.  This should only used by experienced OCL programmers!  Using
  3413. invalid tokens can crash Origami!
  3414. .Ib
  3415. .\"}}}
  3416. .\"{{{  >>>SET_COUNTER<<< var
  3417. .bI "\fB>>>SET_COUNTER<<<\fP \fIname term\fP"
  3418. .dX >>>SET_COUNTER<<<
  3419. The counter-variable \fIname\fP is set to the value of \fIterm\fP.
  3420. .nB
  3421. .dX set-counter
  3422. the old name \fBset-counter\fP is also valid for compatibility reasons.
  3423. .Ib
  3424. .\"}}}
  3425. .\"{{{  >>>SET_COUNTER<<< array
  3426. .bI "\fB>>>SET_COUNTER<<<\fP \fIname\fP \fB(\fP \fIterm1\fP \fB)\fP \fIterm2\fP"
  3427. .dX >>>SET_COUNTER<<<
  3428. The entry \fIterm1\fP of array \fIname\fP is set to the value of
  3429. \fIterm2\fP.
  3430. .nB
  3431. .dX set-counter
  3432. the old name \fBset-counter\fP is also valid for compatibility reasons.
  3433. .Ib
  3434. .\"}}}
  3435. .\"{{{  >>>SET_CURSOR<<<
  3436. .bI "\fB>>>SET_CURSOR<<<\fP \fIterm\fP"
  3437. .dX >>>SET_CURSOR<<<
  3438. Like \fB>>>O_FLUSH<<<\fP, but uses line \fIterm\fP instead of the
  3439. current line.
  3440. .Ib
  3441. .\"}}}
  3442. .\"{{{  >>>RETVAL<<<
  3443. .bI "\fB>>>RETVAL<<<\fP \fIterm\fP"
  3444. .dX >>>RETVAL<<<
  3445. .iX >>>RETURN<<<
  3446. .iX >>>EVAL<<<
  3447. Like \fB>>>RETURN<<<\fP, but a calling \fB>>>EVAL<<<\fP statement can use
  3448. \fIterm\fP as result.
  3449. .Ib
  3450. .\"}}}
  3451. .\"{{{  >>>CHANGE_FOLD<<<
  3452. .bI "\fB>>>CHANGE_FOLD<<<\fP \fIterm term\fP"
  3453. .dX >>>CHANGE_FOLD<<<
  3454. Uses the first \fIterm\fP as foldtype and the second as fold contents and
  3455. changes the attributes of the fold under the cursor.  These values have
  3456. specific meanings in TDS!  The values of the \fIterm\fPs are used modulo
  3457. 255.
  3458. .Ib
  3459. .\"}}}
  3460. .\"{{{  >>>EXITCODE<<<
  3461. .bI "\fB>>>EXITCODE<<<\fP \fIname message-string\fP"
  3462. .iX message-string
  3463. .dX >>>EXITCODE<<<
  3464. Like \fB>>>O_FINISH<<<\fP, but uses value of OCL-variable
  3465. \fIname\fP as exit code.  \fImessage-string\fP is displayed as exit-message.
  3466. .Ib
  3467. .\"}}}
  3468. .\"}}}
  3469. .\"}}}
  3470. .\"}}}
  3471. .\"{{{  character sets
  3472. .nH 3 "Character sets"
  3473. .LP
  3474. .dX "character set"
  3475. In OCL you can use character sets to simplify boolean expressions.
  3476. Predefined character sets are:
  3477. .\"{{{  table of predefined sets
  3478. .nI
  3479. .ne 5
  3480. .TS
  3481. tab(|);
  3482. l l.
  3483. \fB>>>ALPHA_STR<<<\fP|letters \fBa\fP..\fBz\fP,\fBA\fP..\fBZ\fP
  3484. \fB>>>UPPER_STR<<<\fP|uppercase letters \fBA\fP..\fBZ\fP
  3485. \fB>>>LOWER_STR<<<\fP|lowercase letters \fBa\fP..\fBz\fP
  3486. \fB>>>DIGIT_STR<<<\fP|digits \fB0\fP..\fB9\fP
  3487. \fB>>>XDIGIT_STR<<<\fP|\fB>>>DIGIT_STR<<<\fP and letters \fBa\fP..\fBf\fP,\fBA\fP..\fBF\fP
  3488. \fB>>>ALNUM_STR<<<\fP|\fB>>>ALPHA_STR<<<\fP and \fB>>>DIGIT_STR<<<\fP
  3489. \fB>>>BLANK_STR<<<\fP|space or tab
  3490. \fB>>>SPACE_STR<<<\fP|characters generating whitespace
  3491. \fB>>>PRINT_STR<<<\fP|printing character
  3492. \fB>>>CNTRL_STR<<<\fP|control keys 0 .. 31 and delete key 127
  3493. \fB>>>GRAPH_STR<<<\fP|not space character
  3494. \fB>>>PUNCT_STR<<<\fP|punctation character: not \fB>>>ALNUM_STR<<<\fP, \fB>>>DIGIT_STR<<<\fP or \fB>>>SPACE_STR<<<\fP
  3495. .TE
  3496. .In
  3497. .\"}}}
  3498. .nB
  3499. see in  your local '\fBctype\fP' documentation for detailed information.
  3500. .LP
  3501. You can define your own sets with:
  3502. .\"{{{  >>>DEFSET<<<
  3503. .bI "\fB(>>>DEFSET<<<\fP \fIname\fP \fB(\fP \fIelement\fP ... \fB))\fP"
  3504. .dX >>>DEFSET<<<
  3505. The character set name is declared.  Elements are all characters given
  3506. in the \fIelement\fP-list.  \fIelement\fP can be:
  3507. .nI
  3508. .ne 3
  3509. .TS
  3510. tab(|);
  3511. l l.
  3512. \fIname\fP|the name of a known character set
  3513. \fB"\fP\fIx\fP|a normal character
  3514. \fBC\-\fP\fIx\fP|a control character
  3515. .TE
  3516. .In
  3517. .Ib
  3518. .\"}}}
  3519. Inside functions/macros you can use \fB>>>DEFSET<<<\fP as Origami function:
  3520. .\"{{{  >>>DEFSET<<< inside macros
  3521. .bI "\fB>>>DEFSET<<<\fP \fIdest source\fP"
  3522. .dX >>>DEFSET<<<
  3523. The value of set \fIdest\fP is overwritten by the set \fIsource\fP.
  3524. \fIdest\fP has to be a user-defined set.  The predefined sets cannot be
  3525. redefined.
  3526. .Ib
  3527. .\"}}}
  3528. .\"}}}
  3529. .\"{{{  boolean expressions
  3530. .nH 3 "Boolean expressions"
  3531. .LP
  3532. The boolean expressions \fIcondition\fP mentioned above can be:
  3533. .\"{{{  boolean basicfunctions
  3534. .iX boolean basics
  3535. .\"{{{  >>>TRUE_SYM<<<
  3536. .sI \fB>>>TRUE_SYM<<<\fP"
  3537. .Is
  3538. .dX >>>TRUE_SYM<<<
  3539. .\"}}}
  3540. .\"{{{  >>>FALSE_SYM<<<
  3541. .sI \fB>>>FALSE_SYM<<<\fP"
  3542. .Is
  3543. .dX >>>FALSE_SYM<<<
  3544. .\"}}}
  3545. .\"{{{  >>>LASTMES<<<
  3546. .bI "\fB>>>LASTMES<<<\fP \fImessage-name\fP"
  3547. .dX >>>LASTMES<<<
  3548. Is true if the last message created by a string from file >>>MSG_ENDING<<< in the
  3549. Origami source directory was \fImessage-name\fP.  A successful test will
  3550. set the last displayed message to a dummy value, so that
  3551. \fB>>>LASTMES<<<\fP \fIx\fP will be false until a new message is
  3552. displayed.  Using Origami-messages in prompts changes the last displayed
  3553. message.  The appendix contains the list of known messages.
  3554. .Ib
  3555. .\"}}}
  3556. .\"{{{  >>>TEST_CHANGED<<<
  3557. .bI "\fB>>>TEST_CHANGED<<<\fP"
  3558. .dX >>>TEST_CHANGED<<<
  3559. Is true if the current file has been changed.
  3560. .Ib
  3561. .\"}}}
  3562. .\"{{{  >>>TEST_FILED<<<
  3563. .bI "\fB>>>TEST_FILED<<<\fP"
  3564. .dX >>>TEST_FILED<<<
  3565. Is true if the current line is a file-folded-line.
  3566. .Ib
  3567. .\"}}}
  3568. .\"{{{  >>>TEST_FOLD_LINE<<<
  3569. .bI "\fB>>>TEST_FOLD_LINE<<<\fP"
  3570. .dX >>>TEST_FOLD_LINE<<<
  3571. Is true if the current line is a closed-fold-line.
  3572. .Ib
  3573. .\"}}}
  3574. .\"{{{  >>>TEST_BEGIN_FOLD<<<
  3575. .bI "\fB>>>TEST_BEGIN_FOLD<<<\fP"
  3576. .dX >>>TEST_BEGIN_FOLD<<<
  3577. Is true if the current line is the {\&{\&{ line of a open fold.
  3578. .Ib
  3579. .\"}}}
  3580. .\"{{{  >>>TEST_END_FOLD<<<
  3581. .bI "\fB>>>TEST_END_FOLD<<<\fP"
  3582. .dX >>>TEST_END_FOLD<<<
  3583. Is true if the current line is the }\&}\&} line of a open fold.
  3584. .Ib
  3585. .\"}}}
  3586. .\"{{{  >>>TEST_TEXT<<<
  3587. .bI "\fB>>>TEST_TEXT<<<\fP"
  3588. .dX >>>TEST_TEXT<<<
  3589. Is true if the current line is a normal text-line.
  3590. .Ib
  3591. .\"}}}
  3592. .\"{{{  >>>TEST_TOP<<<
  3593. .bI "\fB>>>TEST_TOP<<<\fP"
  3594. .dX >>>TEST_TOP<<<
  3595. Is true if the current line is the top of the entered fold.
  3596. .Ib
  3597. .\"}}}
  3598. .\"{{{  >>>TEST_BOTTOM<<<
  3599. .bI "\fB>>>TEST_BOTTOM<<<\fP"
  3600. .dX >>>TEST_BOTTOM<<<
  3601. Is true if the current line is the bottom of the entered fold.
  3602. .Ib
  3603. .\"}}}
  3604. .\"{{{  >>>TEST_CHAR_C<<<
  3605. .bI "\fB>>>TEST_CHAR_C<<<\fP \fIterm\fP"
  3606. .dX >>>TEST_CHAR_C<<<
  3607. Is true if the ASCII-value of the character under the cursor is equal to
  3608. value of the expression.
  3609. .Ib
  3610. .\"}}}
  3611. .\"{{{  >>>TEST_CHAR_LOW_C<<<
  3612. .bI "\fB>>>TEST_CHAR_LOW_C<<<\fP \fIterm\fP"
  3613. .dX >>>TEST_CHAR_LOW_C<<<
  3614. Is true if the ASCII-value of the character under the cursor is less
  3615. than the value of the expression.
  3616. .Ib
  3617. .\"}}}
  3618. .\"{{{  >>>TEST_CHAR_HIGH_C<<<
  3619. .bI "\fB>>>TEST_CHAR_HIGH_C<<<\fP \fIterm\fP"
  3620. .dX >>>TEST_CHAR_HIGH_C<<<
  3621. Is true if the ASCII-value of the character under the cursor is greater
  3622. than the value of the expression.
  3623. .Ib
  3624. .\"}}}
  3625. .\"{{{  >>>TEST_CHAR_SET<<<
  3626. .bI "\fB>>>TEST_CHAR_SET<<<\fP \fIname\fP"
  3627. .dX >>>TEST_CHAR_SET<<<
  3628. Is true if the character under the cursor is in the given character set
  3629. \fIname\fP.
  3630. .Ib
  3631. .\"}}}
  3632. .\"{{{  >>>TEST_STR<<<
  3633. .bI "\fB>>>TEST_STR<<<\fP \fImessage-string\fP"
  3634. .dX >>>TEST_STR<<<
  3635. Is true if the string, beginning at the cursor and \fImessage-string\fP are the
  3636. same.
  3637. .Ib
  3638. .\"}}}
  3639. .\"{{{  >>>TEST_LANG<<<
  3640. .hI
  3641. \fB>>>TEST_LANG<<< "\fP\fIx\fP
  3642. .br
  3643. \fB>>>TEST_LANG<<< \fP\fIlanguage-name\fP
  3644. .tI
  3645. .dX >>>TEST_LANG<<<
  3646. .iX language
  3647. Is true if \fIx\fP is the language used by \fB>>>O_LANGUAGE<<<\fP.  Instead
  3648. of the single character '\fIx\fP', you can use the language names, like
  3649. given in chapter \fBProcessing Origami Files\fP.
  3650. .iX "Processing Origami Files"
  3651. .eI
  3652. .\"}}}
  3653. .\"{{{  relop
  3654. .dX <
  3655. .dX <=
  3656. .dX =
  3657. .dX <>
  3658. .dX >=
  3659. .dX >
  3660. .bI "[\fB<\fP|\fB<=\fP|\fB=\fP|\fB<>\fP|\fB>=\fP|\fB>\fP]\fB(\fP \fIterm1\fP .. \fItermN\fP \fB)\fP"
  3661. Is true, if \fItermI OP termI+1\fP is true for all I=1..N-1.  No term is
  3662. evaluated more than once.  If \fItermI OP termI+1\fP is false for I, the
  3663. following terms are not evaluated.
  3664. .Ib
  3665. .\"}}}
  3666. .\"{{{  >>>TEST_BEGIN_LINE<<<
  3667. .bI "\fB>>>TEST_BEGIN_LINE<<<\fP"
  3668. .dX >>>TEST_BEGIN_LINE<<<
  3669. Is true if the cursor is placed on or before the first non-space-character
  3670. of the current line.
  3671. .Ib
  3672. .\"}}}
  3673. .\"{{{  >>>TEST_END_LINE<<<
  3674. .bI "\fB>>>TEST_END_LINE<<<\fP"
  3675. .dX >>>TEST_END_LINE<<<
  3676. Is true if the cursor is placed behind the last non-space-character of the
  3677. current line.
  3678. .Ib
  3679. .\"}}}
  3680. .\"{{{  >>>EDITING<<<
  3681. .bI "\fB>>>EDITING<<<\fP"
  3682. .dX >>>EDITING<<<
  3683. Is true if Origami is not waiting for a normal edit-character (for
  3684. example when prompting for a filename).
  3685. .Ib
  3686. .\"}}}
  3687. .\"{{{  >>>TEST_GEN_FOLD<<<
  3688. .bI "\fB>>>TEST_GEN_FOLD<<<\fP"
  3689. .dX >>>TEST_GEN_FOLD<<<
  3690. .iX >>>M_O_VAR<<<
  3691. .iX >>>OCL_ARG_V<<<
  3692. .iX >>>O_CREATE_FOLD<<<
  3693. Is true, if Origami is in create-fold or highlight mode.  The OCL
  3694. variable \fB>>>OCL_ARG_V<<<\fP is set to the value of \fB>>>M_O_VAR<<<\fP at
  3695. \fB>>>O_CREATE_FOLD<<<\fP call.
  3696. .Ib
  3697. .\"}}}
  3698. .\"{{{  >>>TEST_OVER<<<
  3699. .bI "\fB>>>TEST_OVER<<<\fP"
  3700. .dX >>>TEST_OVER<<<
  3701. .iX overwrite-mode
  3702. Is true if Origami is in overwrite-mode.
  3703. .Ib
  3704. .\"}}}
  3705. .\"{{{  >>>TEST_HASH<<<
  3706. .bI "\fB>>>TEST_HASH<<<\fP"
  3707. .dX >>>TEST_HASH<<<
  3708. .iX hash-shift-mode
  3709. Is true if Origami is in \fBhash-shift\fP mode.
  3710. .Ib
  3711. .\"}}}
  3712. .\"{{{  >>>TEST_AUTO<<<
  3713. .bI "\fB>>>TEST_AUTO<<<\fP"
  3714. .dX >>>TEST_AUTO<<<
  3715. .iX autosave-mode
  3716. .iX >>>DEFAUTOSAVE<<<
  3717. Is true if Origami is in autosave-mode.
  3718. .Ib
  3719. .\"}}}
  3720. .\"{{{  >>>TEST_ECHO<<<
  3721. .bI "\fB>>>TEST_ECHO<<<\fP"
  3722. .dX >>>TEST_ECHO<<<
  3723. Is true if Origami is in echo-mode.
  3724. .Ib
  3725. .\"}}}
  3726. .\"{{{  >>>TEST_VIEW<<<
  3727. .bI "\fB>>>TEST_VIEW<<<\fP"
  3728. .dX >>>TEST_VIEW<<<
  3729. .iX view-mode
  3730. Is true if Origami is in view-mode.
  3731. .Ib
  3732. .\"}}}
  3733. .\"{{{  >>>TEST_VERBOSE<<<
  3734. .bI "\fB>>>TEST_VERBOSE<<<\fP"
  3735. .dX >>>TEST_VERBOSE<<<
  3736. .iX verbose
  3737. Is true if Origami is in verbose-mode.
  3738. .Ib
  3739. .\"}}}
  3740. .\"{{{  >>>TEST_TERM<<<
  3741. .bI "\fB>>>TEST_TERM<<<\fP [\fB(\fP] \fIterminal-name\fP [ ... \fB)\fP"
  3742. .dX >>>TEST_TERM<<<
  3743. .iX terminal
  3744. .iX message-string
  3745. Is true, if environment variable \fB>>>TERM<<<\fP is set to one of the
  3746. given \fIterminal-name\fPs.  \fIterminal-name\fP can be given as
  3747. identifier or string (with leading \fB"\fP.).  If \fIterminal-name\fP
  3748. end with a \fB*\fP, the test is true, if \fBTERM\fP starts with
  3749. \fIterminal-name\fP, without the \fB*\fP.  The empty list evaluated to
  3750. \fBFALSE\fP.
  3751. .Ib
  3752. .\"}}}
  3753. .\"{{{  term
  3754. .bI "\fIterm\fP"
  3755. .iX term
  3756. Is true if the given expression evaluates to non-zero.
  3757. .Ib
  3758. .\"}}}
  3759. .\"}}}
  3760. .\"{{{  boolean operators
  3761. .\"{{{  >>>PRE<<<
  3762. .bI "\fB>>>PRE<<< (\fP\fIstatement\fP ... \fB)\fP \fIcondition\fP"
  3763. .dX >>>PRE<<<
  3764. The sequence of \fIstatement\fP will be executed before the evaluation
  3765. of \fIcondition\fP.
  3766. .Ib
  3767. .\"}}}
  3768. .\"{{{  >>>NOT<<<
  3769. .bI "\fB>>>NOT<<<(\fP\fIcondition\fP\fI)\fP"
  3770. .dX >>>NOT<<<
  3771. The value of \fIcondition\fP is logically negated.
  3772. .Ib
  3773. .\"}}}
  3774. .\"{{{  >>>AND<<<
  3775. .bI "\fB>>>AND<<<(\fP\fIcondition\fP [ \fIcondition\fP ... ] \fB)\fP"
  3776. .dX >>>AND<<<
  3777. Is true if all \fIcondition\fPs are true.
  3778. .Ib
  3779. .\"}}}
  3780. .\"{{{  >>>OR<<<
  3781. .bI "\fB>>>OR<<<(\fP\fIcondition\fP [ \fIcondition\fP ... ] \fB)\fP"
  3782. .dX >>>OR<<<
  3783. Is true if one of the \fIcondition\fPs is true.
  3784. .Ib
  3785. .\"}}}
  3786. .\"}}}
  3787. .\"{{{  comments
  3788. .nB
  3789. OCL uses short-circuit evaluation for \fB>>>AND<<<\fP and \fB>>>OR<<<\fP.  When
  3790. Origami is prompting for information (for example, asking to overwrite
  3791. an existing file during \fBtoggle-create-file-fold\fP), you can just use
  3792. the part of OCL also allowed in >>>PRO_IN<<< and >>>PRO_OUT<<<.
  3793. For historical reasons it is allowed to use delimiters \fB,\fP in the
  3794. expression lists for \fB>>>AND<<<\fP and \fB>>>OR<<<\fP.
  3795. .\"}}}
  3796. .\"}}}
  3797. .\"{{{  area
  3798. .nH 3 "The display area"
  3799. .LP
  3800. .iX area
  3801. .iX "display area"
  3802. Origami can use a part of the screen to continuously display a text in
  3803. the same manner as the status line.  This area cannot be edited with the
  3804. normal editing commands.  The text appears below the status line if it
  3805. is enabled, with the last line highlighted.  Otherwise the text appears
  3806. below the editing area.  Controlling this text display area is
  3807. restricted to the following OCL statements:
  3808. .\"{{{  >>>HELP_SET<<<
  3809. .bI "\fB>>>HELP_SET<<<\fP \fIterm\fP"
  3810. .dX >>>HELP_SET<<<
  3811. The OCL expression is used to set the size of the new area.  If its value
  3812. is 0, no text area will be displayed.  Otherwise the value determines the
  3813. number of lines in the new and empty text area.
  3814. .Ib
  3815. .\"}}}
  3816. .\"{{{  >>>HELP_W<<<
  3817. .bI "\fB>>>HELP_W<<<\fP \fIvariable variable message-string\fP"
  3818. .iX message-string
  3819. .dX >>>HELP_W<<<
  3820. Origami uses the variables as x- / y position where to write the
  3821. string \fImessage-string\fP.
  3822. .Ib
  3823. .\"}}}
  3824. .\"}}}
  3825. .\"{{{  modes
  3826. .nH 3 "User defined modes"
  3827. .LP
  3828. .iX modes
  3829. In addition to the predefined modes you can define up to >>>MODE_COUNT<<< new pairs
  3830. of strings which can be displayed as modes in the status line:
  3831. .\"{{{  >>>DEFMODE<<<
  3832. .bI "\fB(>>>DEFMODE<<<\fP \fIname longstring shortstring\fP\fB)\fP"
  3833. .dX >>>DEFMODE<<<
  3834. .iX "long statusline"
  3835. .iX statusline
  3836. \fIname\fP is a new mode.  \fIlongstring\fP is displayed in the status
  3837. line when the mode is active.  If the status line becomes to long,
  3838. \fIshortstring\fP is used.  \fIlongstring\fP and \fIshortstring\fP are
  3839. normal strings (length is limited by >>>BIND_NAME_LEN<<<).  \fIname\fP is a normal
  3840. identifier.
  3841. .Ib
  3842. .\"}}}
  3843. .LP
  3844. Usermodes are controlled by the following Origami commands.  They can be
  3845. used as normal Origami commands in every \fB(>>>DEFMACRO<<< \fP\&.\&.\&.\fB )\fP,
  3846. \fB(>>>INITMACRO<<< \fP\&.\&.\&.\fB )\fP and \fB(>>>DEFOP<<< \fP\&.\&.\&.\fB )\fP.
  3847. .\"{{{  >>>SET_U_M_N<<<
  3848. .bI "\fB>>>SET_U_M_N<<<\fP \fIname term\fP"
  3849. .dX >>>SET_U_M_N<<<
  3850. Usermode \fIname\fP is activated.  At this point, \fIname\fP must be
  3851. defined as usermode!  If \fIterm\fP does not evaluate to 0, this value
  3852. will be displayed after the mode string.
  3853. .Ib
  3854. .\"}}}
  3855. .\"{{{  >>>SET_U_M<<<
  3856. .bI "\fB>>>SET_U_M<<<\fP \fIname\fP"
  3857. .dX >>>SET_U_M<<<
  3858. Usermode \fIname\fP is activated.  At this point, \fIname\fP must be
  3859. defined as user mode!
  3860. .Ib
  3861. .\"}}}
  3862. .\"{{{  >>>RESET_U_M<<<
  3863. .bI "\fB>>>RESET_U_M<<<\fP \fIname\fP"
  3864. .dX >>>RESET_U_M<<<
  3865. Usermode \fIname\fP is reset.  At this point, \fIname\fP must be defined
  3866. as user mode!
  3867. .Ib
  3868. .\"}}}
  3869. .\"}}}
  3870. .\"{{{  multiple keyboards
  3871. .nH 3 "Multiple keyboard modes"
  3872. .\"{{{  declaration
  3873. .LP
  3874. .iX keyboards
  3875. To create more complex keybindings (for example a \fBvi\fP emulation
  3876. with modes), OCL offers the possibility to use different keyboard
  3877. translation tables.  To do this, you must declare the used key tables
  3878. with:
  3879. .\"{{{  >>>MULTIKBD<<<
  3880. .bI "\fB(>>>MULTIKBD<<< (\fP\fIname\fP ... \fB))\fP"
  3881. .dX >>>MULTIKBD<<<
  3882. where \fIname\fP is a normal string.  This command has two effects:
  3883. .nI
  3884. Keybind initializes a key table for each \fIname\fP.
  3885. .In
  3886. and
  3887. .nI
  3888. The macros \fIname\fP are defined and can be used within other macro
  3889. definitions to switch to a certain keytab.  Like macros, defined with
  3890. \fB>>>DEFOP<<<\fP, they are not stored in fixed macro buffers, but you can
  3891. use them for your one function/macro definitions.
  3892. .In
  3893. .nB
  3894. the definition of keyboard translation tables can be spread over
  3895. multiple \fB( >>>MULTIKBD<<<\fP ... \fB)\fP statements. So the following
  3896. OCL sources have the same meaning:
  3897. .\"{{{  single statement
  3898. .DS
  3899. \fB( >>>MULTIKBD<<<\fP \fB( \fP \fIkbd_1 kbd_2\fP \fB) )\fP
  3900. .DE
  3901. .\"}}}
  3902. and
  3903. .\"{{{  sequence of statements
  3904. .DS
  3905. \fB( >>>MULTIKBD<<<\fP \fIkbd_1\fP \fB)\fP
  3906. \fB( >>>MULTIKBD<<<\fP \fIkbd_2\fP \fB)\fP
  3907. .DE
  3908. .\"}}}
  3909. .Ib
  3910. .\"}}}
  3911. .\"}}}
  3912. .\"{{{  bindings
  3913. .LP
  3914. The first defined mode is active when starting Origami.  The definition
  3915. of a declared keyboard can be done with:
  3916. .\"{{{  >>>KBD<<<
  3917. .bI "\fB(>>>KBD<<<\fP \fIname\fP \fB(>>>KEYDEF<<<\fP ... \fB)\fP ... \fB)\fP"
  3918. .dX >>>KBD<<<
  3919. All given bindings are put into the keytable for <name>.  \fB(>>>KEYDEF<<<
  3920. >>>O_BREAK<<< ... )\fP must be declared outside any \fB(>>>KBD<<<\fP ... \fB)\fP
  3921. statement, which means you can only have one abort key for all modes.
  3922. If using multiple keyboard modes, no other \fB(>>>KEYDEF<<<\fP ... \fB)\fP
  3923. statement is allowed outside \fB(>>>KBD<<<\fP ... \fB)\fP statements.
  3924. .LP
  3925. Using this statement more than once for a specific keytable adds all
  3926. given bindings to the given mode.
  3927. .Ib
  3928. .\"}}}
  3929. .\"}}}
  3930. .\"}}}
  3931. .\"{{{  terminals
  3932. .nH 3 "Terminals"
  3933. .LP
  3934. .iX >>>TERMINAL<<<
  3935. You can configure Origami for different terminals in one >>>RC_ENDING<<< file by using
  3936. \fB>>>TERMINAL<<<\fP.  Terminal dependent aliases can be declared on toplevel
  3937. via:
  3938. .\"{{{  terminal alias
  3939. .bI "\fB(>>>TERMINAL<<<\fP [ \fB(\fP ] \fIname\fP [ ... \fB)\fP ] \fB(>>>KEYALIAS<<<\fP ... \fB)\fP ... \fB)\fP"
  3940. .dX >>>TERMINAL<<<
  3941. .iX >>>KEYALIAS<<<
  3942. The corresponding alias definitions will be used for the different
  3943. terminals.  Terminal dependent aliases inside the \fB(>>>KEYALIAS<<<\fP ...
  3944. \fB)\fP statements are handled for each terminal.  The given aliases are
  3945. internally stored as \fItermname\fP\fB@\fP\fIaliasname\fP.  Use \fBautoalias\fP
  3946. to generate your alias declarations.
  3947. .Ib
  3948. .\"}}}
  3949. .LP
  3950. Terminal dependent bindings can be used inside and outside of
  3951. \fB(>>>KBD<<<\fP \&.\&.\&.  \fB)\fP statements.  The declaration has to be
  3952. made like:
  3953. .\"{{{  terminal >>>KEYDEF<<<
  3954. .bI "\fB(>>>TERMINAL<<<\fP [ \fB(\fP ] \fIname\fP [ ... \fB)\fP ] \fB(>>>KEYDEF<<<\fP ... \fB)\fP ... \fB)\fP"
  3955. .dX >>>TERMINAL<<<
  3956. .iX >>>KEYDEF<<<
  3957. The \fB(>>>KEYDEF<<<\fP \&..\&.\&\fB )\fP commands inside this statement
  3958. are only active if Origami is used on a terminal named \fIname\fP (value
  3959. of environment variable >>>ORITERM<<< or >>>TERM<<<).  Used aliases have
  3960. to be declared globally or must be declared as terminal dependent for
  3961. all named terminals.  If a alias is not declared for one of the given
  3962. terminals, the bindings will not be done for this terminal and a
  3963. errormessage will be printed.
  3964. .Ib
  3965. .\"}}}
  3966. .LP
  3967. .iX >>>DEFAULT<<<
  3968. Using \fB>>>DEFAULT<<<\fP as terminalname in \fB(>>>TERMINAL<<<\fP ..\&. \fB)\fP
  3969. statements is allowed.  The corresponding binding will only be done for
  3970. the default-table.
  3971. .wA
  3972. Binding sequences to an as yet not used terminal copies the currently
  3973. known part of the default terminal.
  3974. .nB
  3975. This is not the whole story! we are still trying to work out how to express
  3976. this accurately!
  3977. .LP
  3978. Some different terminals use the same character sequences for their
  3979. different keys.  To prevent multiple keytables for these terminals, you
  3980. can use:
  3981. .\"{{{  >>>TERMALIAS<<<
  3982. .bI "\fB(>>>TERMALIAS<<<\fP \fItermname\fP \fB(\fP \fIaliastermname\fP ... \fB))\fP"
  3983. .dX >>>TERMALIAS<<<
  3984. If \fB$>>>TERM<<<\fP/\fB$>>>ORITERM<<<\fP is set to one of the
  3985. \fIaliastermname\fPs, the keytable for \fItermname\fP is used.  If
  3986. \fIaliastermname\fP ends with \fB*\fP, \fB*\fP matches any text.
  3987. .Ib
  3988. .\"}}}
  3989. .\"}}}
  3990. .\"{{{  conditional compilation
  3991. .nH 3 "Conditional compilation"
  3992. .LP
  3993. .iX "Conditional compilation"
  3994. OCL offers the possibility to use the same OCL source for different
  3995. keybindings by using the commands \fB@>>>if_u_name<<<\fP and \fB@>>>COMPUSE<<<\fP to
  3996. control the compilation of the OCL source.  Some parts of the source
  3997. will be handled like comments (like #if .. #endif in C).
  3998. .\"{{{  >>>COMPUSE<<< (..)
  3999. .bI "\fB@>>>COMPUSE<<< (\fP \fIname\fP ... \fB)\fP"
  4000. .dX @>>>COMPUSE<<<
  4001. From now on the identifiers \fIname\fP ... are known as set tags.
  4002. .Ib
  4003. .\"}}}
  4004. .\"{{{  >>>COMPUSE<<< >>>NOT<<<(..)
  4005. .bI "\fB@>>>COMPUSE<<< >>>NOT<<<(\fP \fIname\fP ... \fB)\fP"
  4006. .dX @>>>COMPUSE<<<
  4007. .dX >>>NOT<<<
  4008. From now on the identifiers \fIname\fP ... are not known as set tags.
  4009. .Ib
  4010. .\"}}}
  4011. .\"{{{  >>>if_u_name<<< (..)
  4012. .bI "\fB@>>>if_u_name<<< (\fP \fItag\fP ... \fB)\fP \fIstatement\fP ...  \fB@fi\fP"
  4013. .dX @>>>if_u_name<<<
  4014. .dX @fi
  4015. The list of statements will only be compiled if one of the tags is set.
  4016. .Ib
  4017. .\"}}}
  4018. .\"{{{  >>>if_u_name<<< >>>NOT<<<(..)
  4019. .bI "\fB@>>>if_u_name<<< >>>NOT<<<(\fP \fItag\fP ... \fB)\fP  \fIstatement\fP ...  \fB@fi\fP"
  4020. .dX @>>>if_u_name<<<
  4021. .dX >>>NOT<<<
  4022. .dX @fi
  4023. The list of statements will only be compiled if none of the tags is set.
  4024. .Ib
  4025. .\"}}}
  4026. .wA
  4027. .iX "filed fold"
  4028. if a filed fold appears inside
  4029. \fB@>>>if_u_name<<<\fP \fB(\fP \fInot-defined-tag\fP \fB)\fP, the fold
  4030. will not be read to speed up compilation.  In this way it is impossible
  4031. to start a \fB@>>>if_u_name<<<\fP-block in one file and end it in
  4032. another !
  4033. .\"}}}
  4034. .\"{{{  specials
  4035. .nH 3 "Special commands"
  4036. .LP
  4037. .\"{{{  limiters
  4038. .\"{{{  mode limiter
  4039. .bI "\fB(>>>MODE_COMMA<<< \fP\fIchar\fP\fB)\fP"
  4040. .dX >>>MODE_COMMA<<<
  4041. .iX ".origami>>>MSG_ENDING<<<"
  4042. The character, which is used to limit the modes is replaced by
  4043. \fIchar\fP.  This overwrites changes made in the \fB.origami>>>MSG_ENDING<<<\fP
  4044. file.
  4045. .Ib
  4046. .\"}}}
  4047. .\"{{{  line limiter
  4048. .bI "\fB(>>>LINEEND<<< \fP\fIchar\fP\fB)\fP"
  4049. .dX >>>LINEEND<<<
  4050. .iX ".origami>>>MSG_ENDING<<<"
  4051. .iX User
  4052. .iX "long statusline"
  4053. The character, which is used to mark long lines is replaced by
  4054. \fIchar\fP.  This overwrites changes made in the \fB.origami>>>MSG_ENDING<<<\fP
  4055. file.  This character is also used, to mark cut strings in language
  4056. \fBUser\fP.
  4057. .Ib
  4058. .\"}}}
  4059. .\"{{{  shift mark
  4060. .bI "\fB(>>>LINESTART<<< \fP\fIchar\fP\fB)\fP"
  4061. .dX >>>LINESTART<<<
  4062. .iX ".origami>>>MSG_ENDING<<<"
  4063. The character, which is used to mark lines, shifted to the left.  This
  4064. overwrites changes made in the \fB.origami>>>MSG_ENDING<<<\fP file.  If
  4065. \fB>>>LINESTART<<<\fP is set to space, no marks are printed!
  4066. .Ib
  4067. .\"}}}
  4068. .\"}}}
  4069. .\"{{{  >>>OS_EXT<<<
  4070. .bI "\fB(>>>OS_EXT<<< (\fP \fIelement\fP ... \fB))\fP"
  4071. .dX >>>OS_EXT<<<
  4072. Keybind generates a >>>RC_ENDING<<<-file entry, containing the given text.  The
  4073. standard UN*X Origami will ignore these entries, but special ports to
  4074. non-UN*X operating-systems may use these entries for their own purposes.
  4075. \fIelement\fP can be:
  4076. .\"{{{  string
  4077. .sI \fIstring\fP
  4078. .Is
  4079. .\"}}}
  4080. .\"{{{  function
  4081. .bI \fIfunction-name\fP
  4082. will be replaced by the used macro place!
  4083. .Ib
  4084. .\"}}}
  4085. .\"{{{  history
  4086. .bI "\fB>>>HISTORY<<<\fP \fIhistory-name\fP"
  4087. will be replaced by the internal history id!
  4088. .Ib
  4089. .\"}}}
  4090. .\"{{{  mode
  4091. .bI "\fB>>>KBD<<<\fP \fIname\fP"
  4092. will be replaced by the internal keyboard number (0,1,..)!
  4093. .Ib
  4094. .\"}}}
  4095. .Ib
  4096. .\"}}}
  4097. .\"{{{  >>>COMMENT<<<
  4098. .bI "\fB@>>>COMMENT<<<\fP \fItext\fP"
  4099. .dX @>>>COMMENT<<<
  4100. All text following \fB@>>>COMMENT<<<\fP up to the end of line will be put
  4101. unchanged into the >>>RC_ENDING<<<-file.  Origami always ignores this >>>RC_ENDING<<<-file entry.
  4102. .Ib
  4103. .\"}}}
  4104. .\"{{{  >>>OPP_ERROR<<<
  4105. .bI "\fB@>>>OPP_ERROR<<<\fP \fItext\fP"
  4106. .dX @>>>OPP_ERROR<<<
  4107. Generate a compilation error.  Report all \fItext\fP following
  4108. \fB@>>>OPP_ERROR<<<\fP up to the end of the line as error-message.
  4109. .Ib
  4110. .\"}}}
  4111. .\"{{{  >>>LINENO<<<
  4112. .bI "\fB@>>>LINENO<<<\fP \fIline number\fP"
  4113. .dX @>>>LINENO<<<
  4114. Sets the line position in the current file to \fIline number\fP.
  4115. Useful for OCL-filters, which add/delete lines in the OCL source.
  4116. .Ib
  4117. .\"}}}
  4118. .LP
  4119. The following functions are special commands, for internal use.  Only
  4120. experienced OCL programmers should use these functions.  They can be
  4121. bound to keysequences (except \fB>>>ECHO_B<<<\fP, \fB>>>ECHO_P<<<\fP,
  4122. \fB>>>SAVE_LAYOUT<<<\fP, \fB>>>RESTORE_LAYOUT<<<\fP,
  4123. \fB>>>POP_DELBUFF<<<\fP,\fB>>>HISTORY<<<\fP, \fB>>>HISTORY_GET<<<\fP and
  4124. \fB>>>HISTORY_EDIT<<<\fP) or used in functions/macros.
  4125. .\"{{{  >>>ECHO_B<<<
  4126. .bI "\fB>>>ECHO_B<<<\fP \fIterm\fP"
  4127. .iX terminal
  4128. .dX >>>ECHO_B<<<
  4129. \fB>>>ECHO_B<<<\fP ignores \fB>>>SCROFF<<<\fP,\fB>>>SCRON<<<\fP and send byte
  4130. \fIterm\fP to stdout (terminal).
  4131. .Ib
  4132. .\"}}}
  4133. .\"{{{  >>>ECHO_P<<<
  4134. .bI "\fB>>>ECHO_P<<<\fP \fImessage-string\fP"
  4135. .iX terminal
  4136. .iX message-string
  4137. .dX >>>ECHO_P<<<
  4138. Like \fB>>>ECHO_B<<<\fP, but send the string \fImessage-string\fP.
  4139. .Ib
  4140. .\"}}}
  4141. .\"{{{  >>>HISTORY<<<
  4142. .bI "\fB>>>HISTORY<<<\fP \fIhistory-name\fP"
  4143. .dX >>>HISTORY<<<
  4144. .iX history
  4145. Do not use the default histories for prompting commands. The default
  4146. history is replaced by the history \fIhistory-name\fP. Predefined are:
  4147. .\"{{{  table of of predefined histories
  4148. .dX >>>SEARCH_HIST<<<
  4149. .dX >>>REPL_HIST<<<
  4150. .dX >>>MISC_HIST<<<
  4151. .dX >>>FILE_HIST<<<
  4152. .dX >>>SHELL_HIST<<<
  4153. .dX >>>ERR_HIST<<<
  4154. .dX >>>ARG_HIST<<<
  4155. .dX >>>MATCH_HIST<<<
  4156. .dX >>>NO_MATCH_HIST<<<
  4157. .dX >>>NO_HIST<<<
  4158. .dX >>>DEFAULT<<<
  4159. .TS
  4160. tab(|);
  4161. l l.
  4162. name:|history, used in:
  4163. \fB>>>SEARCH_HIST<<<\fP|\fB>>>O_FIND<<<\fP, ..
  4164. \fB>>>REPL_HIST<<<\fP|\fB>>>O_REPLACE<<<\fP, ..
  4165. \fB>>>MISC_HIST<<<\fP|\fB>>>O_GOTO_LINE<<<\fP, ..
  4166. \fB>>>FILE_HIST<<<\fP|\fB>>>O_OPEN_NEW_FILE<<<\fP, ..
  4167. \fB>>>SHELL_HIST<<<\fP|\fB>>>O_SHELL<<<\fP, ..
  4168. \fB>>>ERR_HIST<<<\fP|error messages are stored here
  4169. \fB>>>ARG_HIST<<<\fP|list of aliased command line arguments
  4170. \fB>>>MATCH_HIST<<<\fP|used for \fB\-f\fP in directory edit mode.
  4171. \fB>>>NO_MATCH_HIST<<<\fP|used for \fB\-F\fP in directory edit mode.
  4172. \fB>>>NO_HIST<<<\fP|no history
  4173. \fB>>>DEFAULT<<<\fP|use standard histories
  4174. .TE
  4175. .\"}}}
  4176. Other histories are declared outside of functions/macros with:
  4177. .\"{{{  >>>HISTORY<<<
  4178. .bI "\fB( >>>HISTORY<<<\fP \fIhistory-name\fP \fB)\fP"
  4179. .dX >>>HISTORY<<<
  4180. .iX history
  4181. .iX >>>HISTORY_EDIT<<<
  4182. .Ib
  4183. .\"}}}
  4184. .Ib
  4185. .\"}}}
  4186. .\"{{{  >>>HISTORY_EDIT<<<
  4187. .bI "\fB>>>HISTORY_EDIT<<<\fP \fIhistory-name message-string\fP"
  4188. .iX message-string
  4189. .dX >>>HISTORY_EDIT<<<
  4190. .iX history
  4191. Prompt for a string and use history \fIhistory-name\fP.
  4192. .Ib
  4193. .\"}}}
  4194. .\"{{{  >>>HISTORY_EDIT_L<<<
  4195. .bI "\fB>>>HISTORY_EDIT_L<<<\fP \fIhistory-name message-string\fP"
  4196. .iX message-string
  4197. .dX >>>HISTORY_EDIT_L<<<
  4198. .iX >>>HISTORY_EDIT<<<
  4199. .iX history
  4200. Like \fB>>>HISTORY_EDIT<<<\fP, but the prompt is initialized with the
  4201. current line and cursor position.  Spaces from entered folds are
  4202. skipped.
  4203. .Ib
  4204. .\"}}}
  4205. .\"{{{  >>>HISTORY_EDIT_F<<<
  4206. .bI "\fB>>>HISTORY_EDIT_F<<<\fP \fIhistory-name message-string\fP"
  4207. .iX message-string
  4208. .dX >>>HISTORY_EDIT_F<<<
  4209. .iX >>>HISTORY_EDIT<<<
  4210. .iX history
  4211. Like \fB>>>HISTORY_EDIT<<<\fP, but the prompt is initialized with the
  4212. current filename.
  4213. .Ib
  4214. .\"}}}
  4215. .\"{{{  >>>HISTORY_GET<<<
  4216. .bI "\fB>>>HISTORY_GET<<<\fP \fIhistory-name term\fP"
  4217. .dX >>>HISTORY_GET<<<
  4218. .iX history
  4219. Insert a string from history list \fIhistory-name\fP into the input
  4220. stream.  \fIterm\fP gives the number of the chosen item (0 is newest, 1
  4221. is one before, ...).
  4222. .Ib
  4223. .\"}}}
  4224. .\"{{{  note beside: histories=string-vars
  4225. .nB
  4226. histories can be used as string variables.
  4227. .\"}}}
  4228. .\"{{{  >>>POP_DELBUFF<<<
  4229. .bI "\fB>>>POP_DELBUFF<<<\fP"
  4230. .dX >>>POP_DELBUFF<<<
  4231. .iX delete buffer
  4232. Remove the last deleted line from the delete buffer. There is \fBno\fP
  4233. undo for this action.
  4234. .eI
  4235. .\"}}}
  4236. .\"{{{  >>>SCROFF<<<
  4237. .bI "\fB>>>SCROFF<<<\fP"
  4238. .dX >>>SCROFF<<<
  4239. Turn off the screen display.  If keyboard input is expected and the screen is
  4240. switched off, the abort key is automatically invoked and the display turned
  4241. on again.
  4242. .Ib
  4243. .\"}}}
  4244. .\"{{{  >>>SCRON<<<
  4245. .bI "\fB>>>SCRON<<<\fP"
  4246. .dX >>>SCRON<<<
  4247. Turn on the screen display.  You have to call \fB>>>O_FLUSH<<<\fP yourself.
  4248. .Ib
  4249. .\"}}}
  4250. .\"{{{  >>>SAVE_LAYOUT<<<
  4251. .bI \fB>>>SAVE_LAYOUT<<<\fP
  4252. .dX >>>SAVE_LAYOUT<<<
  4253. Saves the current window positions.  There is no stack, so using this
  4254. command more than once will overwrite the data.
  4255. .Ib
  4256. .\"}}}
  4257. .\"{{{  restore-layout
  4258. .bI \fB>>>RESTORE_LAYOUT<<<\fP
  4259. .dX >>>RESTORE_LAYOUT<<<
  4260. .iX >>>SAVE_LAYOUT<<<
  4261. Try to restore the buffer sizes and positions to the ones, saved by the
  4262. last \fB>>>SAVE_LAYOUT<<<\fP command.  The screen will be refreshed.  New
  4263. buffers always set their saved size to 0 lines and 0 columns.  However,
  4264. the minimum size for the current buffer is >>>TXT_MIN_H<<< lines and >>>TXT_MIN_W<<<
  4265. columns.
  4266. .Ib
  4267. .\"}}}
  4268. .\"{{{  >>>O_PROMPT<<<
  4269. .bI "\fB>>>O_PROMPT<<<\fP"
  4270. .dX >>>O_PROMPT<<<
  4271. .iX >>>SCROFF<<<
  4272. .iX >>>SCRON<<<
  4273. .iX >>>O_FLUSH<<<
  4274. Refresh the current line.  \fB>>>SCROFF<<<\fP/\fB>>>SCRON<<<\fP can be used for
  4275. single line operations, without redrawing the complete screen.
  4276. .Ib
  4277. .\"}}}
  4278. .LP
  4279. There are a special OCL commands, which can be used to load/remove
  4280. demand loaded macros:
  4281. .\"{{{  >>>LOAD<<<
  4282. .bI "\fB>>>LOAD<<< (\fP \fIname\fP \&.\&. \fB)\fP"
  4283. .dX >>>LOAD<<<
  4284. .iX >>>DEMAND<<<
  4285. Tries to load all named functions. May be used to speed up libraries,
  4286. using many demand loaded functions.
  4287. .Ib
  4288. .\"}}}
  4289. .\"{{{  >>>LOAD<<< >>>NOT<<<
  4290. .bI "\fB>>>LOAD<<< >>>NOT<<<(\fP \fIname\fP .. \fB)\fP"
  4291. .dX ">>>LOAD<<< >>>NOT<<<"
  4292. .iX >>>NOT<<<
  4293. .iX >>>LOAD<<<
  4294. .iX >>>DEMAND<<<
  4295. Remove the functions \fIname\fP .., if they are a demand loaded.  If one
  4296. of the functions is needed again, it will be loaded automatically.
  4297. .wA
  4298. there are no test, if the macro is currently in use.  Origami may die, if
  4299. you remove a used macro!
  4300. .Ib
  4301. .\"}}}
  4302. .\"}}}
  4303. .\"{{{  references
  4304. .nH 3 "References"
  4305. .LP
  4306. .iX references
  4307. The following command can be used to generate additional text files
  4308. while compiling new binding:
  4309. .\"{{{  reference-begin/end
  4310. .hI
  4311. \fB@>>>STARTREF<<<\fP
  4312. .br
  4313.   <comments>
  4314. .br
  4315.       :
  4316. .br
  4317. \fB@>>>end_ref<<<\fP
  4318. .tI
  4319. .dX @>>>STARTREF<<<
  4320. .dX @>>>end_ref<<<
  4321. If the command line option \fB\-r\fP\fIreferencefile\fP is active, all
  4322. comments will be put into \fIreferencefile\fP.  The text between the
  4323. \fB@>>>STARTREF<<<\fP / \fB>>>end_ref<<<\fP marks will not be parsed as OCL
  4324. code, so that the commands must appear at the beginning of a line and
  4325. must be followed by a newline.  If the command line option \fB\-R\fP is
  4326. active, the data will copied to the >>>RC_ENDING<<< file.  Origami can display it
  4327. with \fB>>>O_HELP<<<\fP, if no other helpfile is given.  The lines are cut, if
  4328. they have more than >>>RC_HELP_LEN<<< characters.
  4329. .eI
  4330. .\"}}}
  4331. .LP
  4332. The next command can be used, to store different help pages in the rc
  4333. file:
  4334. .\"{{{  reference-begin-class/end
  4335. .hI
  4336. \fB@>>>STARTREF_NO<<<\fP \fBname\fP
  4337. .br
  4338.   <comments>
  4339. .br
  4340.       :
  4341. .br
  4342. \fB@>>>end_ref<<<\fP
  4343. .br
  4344. .tI
  4345. .dX @>>>STARTREF_NO<<<
  4346. .dX @>>>end_ref<<<
  4347. .iX >>>O_HELP<<<
  4348. .iX >>>M_O_VAR<<<
  4349. All comments will be put into the >>>RC_ENDING<<< file.  The  text  can  be  read  by
  4350. using \fB>>>O_HELP<<<\fP, if OCL variable \fB>>>M_O_VAR<<<\fP is set to
  4351. \fIname\fP (keybind creates a constant integer value for \fIname\fP).
  4352. Instead of symbolic names, you can also use integer constants
  4353. \fInumber\fP (\fB1\fP<=\fInumber\fP<=\fB>>>RC_CLASS_MAX<<<\fP).  The
  4354. lines are cut, if they have more than >>>RC_HELP_LEN<<< characters.
  4355. .eI
  4356. .\"}}}
  4357. .LP
  4358. Origami compresses the references or
  4359. \fB>>>O_DESCRIBE_BINDINGS<<<\fP-data, before adding them to the
  4360. >>>RC_ENDING<<<-file. There is a default list of words, which will be
  4361. stored with a 2 byte coding. The following command can be used, to
  4362. modify this list.
  4363. .\"{{{  >>>REF_COMP<<<
  4364. .bI "\fB( >>>REF_COMP<<<\fP [\fB>>>SET_COUNTER<<<\fP] \fB(\fP \fIstring\fP .. \fB) )\fP"
  4365. All strings \fIstring\fP will be added to the list of compression words.
  4366. If \fB>>>SET_COUNTER<<<\fP is used, the list will be set to the empty
  4367. list, before adding the strings.
  4368. .nB
  4369. there can be more than one \fB>>>REF_COMP<<<\fP commands in a OCL source.
  4370. .nB
  4371. the words are tested in the order of their appearance, so prefixes of
  4372. longer words should be defined after the definition of their extensions.
  4373. .Ib
  4374. .\"}}}
  4375. .\"}}}
  4376. .\"}}}
  4377. .\"{{{  OCL examples
  4378. .nH 2 "OCL examples"
  4379. .LP
  4380. This section includes some commented OCL examples for you to browse
  4381. through before starting your own applications.  It is assumed that you
  4382. are familiar with Origami before you start programming in OCL.
  4383. .\"{{{  simple keybindings
  4384. .nH 3 "Bindings keys"
  4385. .LP
  4386. The following examples show how you can bind commands to (sequences of)
  4387. keys and how aliases work.
  4388. .\"{{{  first example with return
  4389. .eX >>>KEYDEF<<<
  4390. .eX C-
  4391. .DS
  4392. ; This is a simple keybind file
  4393. (>>>KEYDEF<<< >>>O_RETURN<<< C-M)
  4394. .DE
  4395. The operation `>>>O_RETURN<<<' is activated by pressing the key C-M.  The
  4396. line `>>>O_RETURN<<< C-M' will be included in the keybinding help screens
  4397. available to the user.
  4398. .\"}}}
  4399. .\"{{{  same example with alias
  4400. You can achieve the same keybinding by using an alias:
  4401. .eX >>>KEYDEF<<<
  4402. .eX >>>KEYALIAS<<<
  4403. .eX C-
  4404. .eX $
  4405. .DS
  4406. ; This keybinding uses >>>KEYALIAS<<<
  4407. (>>>KEYALIAS<<< enter C-M)
  4408. (>>>KEYDEF<<< >>>O_RETURN<<< $enter)
  4409. .DE
  4410. The operation `>>>O_RETURN<<<' is activated by C-M as before;
  4411. the keybinding help will show `>>>O_RETURN<<< enter'.  If your
  4412. terminal sends an unusual sequence of characters for the enter key instead
  4413. of the C-M character (very rare), you would just define your own alias for $enter
  4414. and leave the comprehensive >>>KEYDEF<<< command unchanged.
  4415. .\"}}}
  4416. .\"}}}
  4417. .\"{{{  byebye
  4418. .nH 3 "A small function"
  4419. .LP
  4420. The first OCL example does not use any control structures.  It defines a
  4421. macro named byebye.  You should play a little with such functions/macros
  4422. to get used to the compilation process and its (error) messages.
  4423. .eX >>>DEFOP<<<
  4424. .eX macro
  4425. .eX >>>KEYDEF<<<
  4426. .eX M-
  4427. .DS
  4428. ; this is an example for a function definition:
  4429. ( >>>DEFOP<<< byebye
  4430.    ( >>>O_BOT_OF_FOLD<<<
  4431.      >>>O_START_OF_LINE<<<
  4432.      >>>O_RETURN<<<
  4433.      >>>O_UP<<<
  4434.      "end "  "of " "text
  4435.    )
  4436. )
  4437. .sp
  4438. (>>>KEYDEF<<< byebye (M-"x "b "y "e))
  4439. .DE
  4440. byebye creates a new line containing \fBend of text\fP at the end of the
  4441. entered fold.
  4442. .\"}}}
  4443. .\"{{{  shell version control
  4444. .nH 3 "Revision control system"
  4445. .LP
  4446. Two more little functions deal with RCS.  Note that the check out function
  4447. is only for personal use of RCS.  If you are working in a group, someone
  4448. else may have edited the file, which will not change your own read only
  4449. copy.  The advantage is that you can visit a file and decide if you want
  4450. to change it.
  4451. .eX >>>DEFMACRO<<<
  4452. .eX function
  4453. .eX RCS
  4454. .eX >>>O_SHELL_COMMAND<<<
  4455. .eX view-mode
  4456. .DS
  4457. (>>>DEFMACRO<<< check-out (
  4458.   >>>IF<<< >>>NOT<<<(>>>EDITING<<<)
  4459.   (
  4460.     >>>O_D_VIEW<<<
  4461.     >>>O_SHELL_COMMAND<<< "co "  "-l "  "$>>>ORIFILE<<<
  4462.   )
  4463.   >>>fi_name<<<
  4464. ))
  4465.  
  4466. (>>>DEFMACRO<<< check-in (
  4467.   >>>IF<<< >>>NOT<<<(>>>EDITING<<<)
  4468.   (
  4469.     >>>O_SAVE_FILE<<<
  4470.     >>>O_A_VIEW<<<
  4471.     >>>O_SHELL_COMMAND<<< "ci "  "-u "  "$>>>ORIFILE<<<
  4472.   )
  4473.   >>>fi_name<<<
  4474. ))
  4475. .DE
  4476. .\"}}}
  4477. .\"{{{  mtool-top
  4478. .nH 3 "MTool-version of top-of-fold"
  4479. .LP
  4480. This a user defined function, simulating the command top-of-fold as it
  4481. is used in the mtool system.  The cursor moves to the begin of the
  4482. currently opened fold.
  4483. .eX TDS
  4484. .eX >>>LANG_Inmos<<<
  4485. .eX >>>DEFMACRO<<<
  4486. .eX function
  4487. .DS
  4488. ; example for a more complex function
  4489. (>>>DEFMACRO<<< mtool-top
  4490. (
  4491.   >>>IF<<< >>>TEST_END_FOLD<<< (>>>O_UP<<<) >>>fi_name<<<
  4492.   >>>WHILE<<< >>>AND<<<(>>>NOT<<<(>>>TEST_BEGIN_FOLD<<<),>>>NOT<<<(>>>TEST_TOP<<<))
  4493.   (
  4494.     >>>IF<<< >>>TEST_END_FOLD<<< (mtool-top) >>>fi_name<<<
  4495.     >>>O_UP<<<
  4496.   )
  4497. ))
  4498. .DE
  4499. While the cursor is not being located on top of a fold (entered or
  4500. opened) the cursor is moved up.  If the function finds the end of fold line
  4501. from another opened fold, this fold is skipped by a recursive call of
  4502. mtool-top.
  4503. .\"}}}
  4504. .\"{{{  fill-paragraph
  4505. .nH 3 "Fill paragraph"
  4506. .LP
  4507. The next example function is a bit more advanced.  It is too lengthy to
  4508. include it here, but it can be found in the file fill-paragraph.
  4509. .LP
  4510. fill-paragraph fills all lines from cursor position to the next line
  4511. with a blank (or a dot in ``roff-mode'') in the first column.  Not text
  4512. lines and line, starting wtih fold-comment-start string stop r filling
  4513. too.  The first column of a line is here the first character in
  4514. currently entered fold, not opened fold!  Filling a line means to add
  4515. words from the next line if it is too short or to put words to the next
  4516. line if it is to long.  The default right margin is set to column 72.
  4517. If there are unfillable lines, fill-paragraph stops filling and
  4518. complains.  Fill-column counts from beginning of entered fold
  4519. indentation.
  4520. .LP
  4521. The filling can be done in the following 2 ways:
  4522. .Ib
  4523. .bI "block-mode"
  4524. All `` '' are expanded to ``  '', till the line reaches the fill margin.
  4525. .Ib
  4526. .bI "shrink-mode"
  4527. All ``  '' are replaced by `` '' and the right margin remains unaligned
  4528. or ragged.
  4529. If language \fBRoff\fP is active, ``. '' is replaced by ``.  ''.
  4530. .Ib
  4531. .LP
  4532. The function set-fill-mode switches between these modes.
  4533. .LP
  4534. The function auto-wrap can be used instead of `` ''.  If the cursor is
  4535. at end of line, the currently typed word is automatically wrapped into a
  4536. new line.
  4537. .LP
  4538. The function set-fill-column allows to change the right margin.  To do
  4539. so, you can either use a numeric argument, point to the position of the
  4540. new right margin with the cursor or make Origami prompt for the new
  4541. column width by moving the cursor to the left margin.
  4542. .\"}}}
  4543. .\"{{{  goto-matching-fence
  4544. .nH 3 "Goto matching fence"
  4545. .LP
  4546. If you are writing programs, you often want to know which parentheses
  4547. match in a complicated expression.  \fBgoto-matching-fence\fP performs
  4548. this function.  It uses the character under the cursor to determine if
  4549. you are looking for a round, square or curly bracket and if you want to
  4550. jump to the opening or the closing one.  If the cursor is not located on
  4551. a bracket, nothing will happen.  Otherwise the function searches the
  4552. matching fence.  If it cannot find it, it will move back to your old
  4553. position.  If necessary, this function opens and closes folds.  Do not
  4554. worry if it does not seem to stop searching.  If your text is very long
  4555. and there is no fitting fence, you will be amazed how many folds you are
  4556. using and how fast they can be opened and closed, but usually
  4557. goto-matching-fence will exit gracefully at last.  Remember the
  4558. operation can also be interrupted by the abort character (often bound to
  4559. C-G).
  4560. .\"}}}
  4561. .\"{{{  towers-of-hanoi
  4562. .nH 3 "The towers of hanoi"
  4563. .LP
  4564. This is a funny function to demonstrate the power of OCL.  You should
  4565. type a string of a few characters without blanks, then start this function
  4566. and have fun.
  4567. .wA
  4568. If you type more than about eight to ten characters, the game will
  4569. require a long time.
  4570. .\"}}}
  4571. .\"{{{  conditional compilation
  4572. .nH 3 "Conditional compilation"
  4573. .\"{{{  simple example
  4574. .LP
  4575. A simple example for the usage of conditional compilation:
  4576. .eX "Conditional compilation"
  4577. .eX @>>>if_u_name<<<
  4578. .eX @>>>fi_name<<<
  4579. .eX >>>NOT<<<
  4580. .DS
  4581. @>>>if_u_name<<< (foo)
  4582.   \&.\&.\&.  block
  4583. @>>>fi_name<<<
  4584. .DE
  4585. `\&.\&.\&.  block' will only be compiled if the tag \fIfoo\fP is known
  4586. as used.  This can be done by an earlier \fB@>>>COMPUSE<<< (\fP\fIfoo\fP\fB)\fP or
  4587. by the commandline option \fB-U\fP\fIfoo\fP.
  4588. .\"}}}
  4589. .\"{{{  file-fold example
  4590. .LP
  4591. Another example shows the usage of conditional compilation to prevent
  4592. multiple compilation of a file:
  4593. .eX @>>>if_u_name<<<
  4594. .eX @>>>fi_name<<<
  4595. .eX >>>COMPUSE<<<
  4596. .eX libraries
  4597. .DS
  4598. @>>>if_u_name<<< >>>NOT<<<(FILENAME)
  4599.   @>>>COMPUSE<<< (FILENAME)
  4600.   \&.\&.\&.  block
  4601. @>>>fi_name<<<
  4602. .DE
  4603. .LP
  4604. This technique is used in the library files in the bindings directory.
  4605. .\"}}}
  4606. .\"{{{  multiple configurations
  4607. .LP
  4608. The following example shows, how different keyboards, function and macro
  4609. sets etc.\& can be handled properly with one OCL source.  You need only
  4610. one tag to choose the correct environment.  This can be done either by
  4611. an earlier \fB@>>>COMPUSE<<< (\fP\fI??\fP\fB)\fP or by the command switch
  4612. \fB\-U\fP\fI??\fP.
  4613. .eX @>>>if_u_name<<<
  4614. .eX @>>>fi_name<<<
  4615. .eX @>>>COMPUSE<<<
  4616. .DS
  4617. .\"{{{  set tags
  4618. {\&{\&{  choose correct compilation tags
  4619. @>>>if_u_name<<< (kbd_1_macros_1)
  4620.   @>>>COMPUSE<<< ( kbd_1 mac_1 )
  4621. @>>>fi_name<<<
  4622. @>>>if_u_name<<< (kbd_2_macros_1)
  4623.   @>>>COMPUSE<<< ( kbd_2 mac_1 )
  4624. @>>>fi_name<<<
  4625. ; you can write such statements as well:
  4626. @>>>if_u_name<<< (kbd_1_macros_2) @>>>COMPUSE<<< ( kbd_1 mac_2 ) @>>>fi_name<<<
  4627. @>>>if_u_name<<< (kbd_2_macros_2) @>>>COMPUSE<<< ( kbd_2 mac_2 ) @>>>fi_name<<<
  4628. @>>>if_u_name<<< ( kbd_2_c ) @>>>COMPUSE<<< (kbd_2 c_macs mac_1) @>>>fi_name<<<
  4629. }\&}\&}
  4630. .\"}}}
  4631. .DE
  4632. .eX @>>>if_u_name<<<
  4633. .eX @>>>fi_name<<<
  4634. .DS
  4635. .\"{{{  macros
  4636. {\&{\&{  macros
  4637. \&.\&.\&.  simple macros
  4638. @>>>if_u_name<<< (mac_2)
  4639.   .\&.\&.F special tex macros
  4640. @>>>fi_name<<<
  4641. @>>>if_u_name<<< (mac_1)
  4642.   .\&.\&.F text edit helps
  4643. @>>>fi_name<<<
  4644. @>>>if_u_name<<< (c_macs)
  4645.   .\&.\&.F c_macros
  4646. @>>>fi_name<<<
  4647. }\&}\&}
  4648. .\"}}}
  4649. .DE
  4650. .eX @>>>if_u_name<<<
  4651. .eX @>>>fi_name<<<
  4652. .DS
  4653. .\"{{{  kbd
  4654. \&{\&{\&{  keyboard mapping
  4655. \&.\&.\&.  terminal_keymap (esc,shift,ctrl ... )
  4656. @>>>if_u_name<<< (kbd_1)
  4657.   .\&.\&.F simple_keys (cursor- and functionkeys)
  4658. @>>>fi_name<<<
  4659. @>>>if_u_name<<< (kbd_2)
  4660.   .\&.\&.F more_complex_keys (cursor- and functionkeys)
  4661. @>>>fi_name<<<
  4662. }\&}\&}
  4663. .\"}}}
  4664. .DE
  4665. The usage of more descriptive identifiers is left as an exercise for
  4666. the reader.
  4667. .\"}}}
  4668. .\"}}}
  4669. .\"{{{  including files
  4670. .nH 3 Libraries
  4671. .LP
  4672. To use a library file, you can use the following 3 techniques:
  4673. .\"{{{  filed fold
  4674. .eX "filed fold"
  4675. .eX >>>include_name<<<
  4676. .DS
  4677. ; to include the file filename
  4678. ; in the current directory:
  4679. \&...F filename
  4680. .DE
  4681. .\"}}}
  4682. or
  4683. .\"{{{  >>>include_name<<<
  4684. .eX >>>include_name<<<
  4685. .eX @>>>include_name<<<
  4686. .DS
  4687. ; to include the file filename
  4688. ; in the current directory:
  4689. @>>>include_name<<< filename
  4690. .DE
  4691. .\"}}}
  4692. or
  4693. .\"{{{  >>>LIB<<<
  4694. .eX >>>include_name<<<
  4695. .eX libraries
  4696. .eX @>>>LIB<<<
  4697. .DS
  4698. ; to include a file filename
  4699. ; in directory dir (dir is part of
  4700. ; the keybind library path):
  4701. @>>>LIB<<< filename
  4702. .DE
  4703. .\"}}}
  4704. .\"}}}
  4705. .\"{{{  terminals und modes
  4706. .nH 3 "Modes and terminals"
  4707. .\"{{{  simple example
  4708. .LP
  4709. A simple example for the usage of multiple keyboards is the following:
  4710. .\"{{{  example
  4711. .eX >>>MULTIKBD<<<
  4712. .eX >>>KBD<<<
  4713. .eX >>>DEFAB<<<
  4714. .eX >>>KEYDEF<<<
  4715.  
  4716. .DS
  4717. (>>>MULTIKBD<<< edit shell)
  4718. .DE
  4719. .DS
  4720. ( >>>DEFMACRO<<< shell-commands ( >>>O_A_VIEW<<< shell ) )
  4721. ( >>>DEFMACRO<<< editing ( >>>O_D_VIEW<<< edit ) )
  4722. ( >>>DEFAB<<< editing )
  4723. .DE
  4724. .DS
  4725. (>>>KBD<<< edit
  4726.   .\&.\&.  bind all normal edit commands
  4727.   ( >>>KEYDEF<<< shell-commands ( .. ) )
  4728. )
  4729. .DE
  4730. .DS
  4731. (>>>KBD<<< shell
  4732.   .\&.\&.  bind commands calling special shell scripts
  4733.   ( >>>KEYDEF<<< editing       ( .. ) )
  4734. )
  4735. .DE
  4736. .DS
  4737. \&.\&.\&.  some other macros
  4738. (>>>KBD<<< shell    ; mode is splitted in 2 definitions
  4739.   .\&.\&.  bind commands calling special shell-scripts,part 2
  4740. )
  4741. .DE
  4742. .\"}}}
  4743. This enables you to use all normal characters for your
  4744. shell commands or predefined system calls.
  4745. .\"}}}
  4746. .\"{{{  terminals
  4747. .LP
  4748. Another example shows the usage of terminal dependent bindings.
  4749. .\"{{{  example
  4750. .eX >>>MULTIKBD<<<
  4751. .eX >>>KEYALIAS<<<
  4752. .eX >>>TERMINAL<<<
  4753. .eX >>>KEYDEF<<<
  4754. .DS
  4755. (>>>MULTIKBD<<< keyboard)
  4756. \&.\&.\&.  aliases for SUN-keyboard
  4757. \&.\&.\&.  aliases for PC-keyboard
  4758. (>>>KBD<<< keyboard
  4759.   .\&.\&.  all normal edit commands
  4760.   ( >>>TERMINAL<<< SUN
  4761.      .\&.\&.  all SUN keyboard function keys
  4762.   )
  4763.   ( >>>TERMINAL<<< PC
  4764.      .\&.\&.  all PC keyboard function keys
  4765.   )
  4766. )
  4767. .DE
  4768. .\"}}}
  4769. .LP
  4770. Origami loads only one of the given tables, depending on the value of
  4771. \fB$>>>ORITERM<<<\fP or \fB$>>>TERM<<<\fP.  The default keyboard uses
  4772. none of the additional bindings.
  4773. .LP
  4774. The following is an example for using terminal dependencies for aliases
  4775. too:
  4776. .\"{{{  example
  4777. .eX >>>MULTIKBD<<<
  4778. .eX >>>TERMINAL<<<
  4779. .eX autoalias
  4780. .eX >>>KBD<<<
  4781. .eX >>>KEYDEF<<<
  4782. .DS
  4783. (>>>MULTIKBD<<< keyboard)
  4784. .DE
  4785. .DS
  4786. \&{\&{\&{  aliases for SUN keyboard - autoalias
  4787. ; created with 'autoalias -tsun'
  4788. ( >>>TERMINAL<<< sun
  4789.    ( >>>KEYALIAS<<< up ( ... ) )
  4790.    \&.\&..
  4791. )
  4792. \&}\&}\&}
  4793. \&.\&.\&.  aliases for PC keyboard  - hand coded
  4794. .DE
  4795. .DS
  4796. (>>>KBD<<< keyboard
  4797.   .\&.\&.  all normal edit commands
  4798.   ( >>>TERMINAL<<< ( sun PC )
  4799.      ( >>>KEYDEF<<< >>>O_UP<<< ( $up ) )
  4800.        ; instead of $up, $sun@up and $PC@up
  4801.        ; will be used in the two tables
  4802.      \&.\&..
  4803.   )
  4804. )
  4805. .DE
  4806. .\"}}}
  4807. .\"}}}
  4808. .\"}}}
  4809. .\"{{{  options,startup,hooks
  4810. .nH 3 "Command line options, hooks"
  4811. .LP
  4812. .eX "Command line options"
  4813. This example shows, how complex bindings can use their own command line
  4814. options.  It also shows, how the semantics of a predefined command can
  4815. be changed.  The new command line options \fBnohigh\fP, \fBhigh\fP,
  4816. \fBstat\fP and \fBnostat\fP are defined to be used with \fB\-O\fP to
  4817. enable, disable the highlighting while creating a fold and the display
  4818. of the statusline.
  4819. .\"{{{  example
  4820. .DS
  4821. .eX "Command line options"
  4822. .\"{{{  names and modes
  4823. \&{{{  names and modes
  4824. .eX >>>OCL_ARG_V<<<
  4825. .eX >>>BINDNAME<<<
  4826. ( >>>BINDNAME<<<
  4827.    Example
  4828.    ( "high "|1^1 ) ( "nohigh "|1   )
  4829.    ( "stat "|2^2 ) ( "nostat "|2   )
  4830.       ; use bits 0,1 for the two modes
  4831.       ; FALSE=default=display on
  4832. )
  4833. \&}}}
  4834. .\"}}}
  4835. .\"{{{  variables
  4836. \&{{{  variables
  4837. ( >>>DEFVAR<<< ( startup no-highlighting ) )
  4838. \&}}}
  4839. .\"}}}
  4840. .\"{{{  mode highlighting
  4841. \&{{{  mode highlighting
  4842. ( >>>DEFMACRO<<< add-mode-highlighting
  4843.    ( >>>SET_COUNTER<<< no-highlighting 0 )
  4844. )
  4845. ( >>>DEFMACRO<<< delete-mode-highlighting
  4846.    ( >>>SET_COUNTER<<< no-highlighting 1 )
  4847. )
  4848. \&}}}
  4849. .\"}}}
  4850. .\"{{{  >>>O_CREATE_FOLD<<<
  4851. \&{{{  >>>O_CREATE_FOLD<<<
  4852. .eX >>>O_CREATE_FOLD<<<
  4853. .eX >>>M_O_VAR<<<
  4854. ( >>>DEFOP<<< >>>O_CREATE_FOLD<<<-orig ( >>>O_CREATE_FOLD<<< ) )
  4855. ( >>>UNDECLARE<<< ( >>>O_CREATE_FOLD<<< ) )
  4856. ( >>>DEFMACRO<<< >>>O_CREATE_FOLD<<<
  4857.    ( >>>LOC<<<
  4858.       ( >>>M_O_VAR<<< )
  4859.       ( >>>IF<<< >>>AND<<<(no-highlighting =(0 >>>M_O_VAR<<<))
  4860.          ( >>>SET_COUNTER<<< >>>M_O_VAR<<< 5 )
  4861.         >>>fi_name<<<
  4862.           ; change only, if default
  4863.           ; >>>O_CREATE_FOLD<<< should be used!
  4864.         >>>O_CREATE_FOLD<<<
  4865.       )
  4866.    )
  4867. )
  4868. ( >>>UNDECLARE<<< ( >>>O_CREATE_FOLD<<<-orig ) )
  4869. \&}}}
  4870. .\"}}}
  4871. .\"{{{  startup macro
  4872. \&{{{  startup macro
  4873. ( >>>DEMAND<<<
  4874.    (
  4875. .eX >>>OCL_ARG_V<<<
  4876. .eX >>>TEST_TERM<<<
  4877.      .\"{{{  startup-fun
  4878.      \&{{{  startup-fun
  4879.      ( >>>DEFMACRO<<< startup-fun
  4880.         ( >>>IF<<< <>(ocl-argument -1)
  4881.            ( >>>SET_COUNTER<<< startup ocl-argument )
  4882.                ; >>>OCL_ARG_V<<< set by \-O
  4883.           >>>fi_name<<<
  4884.           .\"{{{  handle bit 2, 0=statusline on
  4885.           \&{{{  handle bit 2, 0=statusline on
  4886.           >>>IF<<< >=(startup 2)
  4887.            ( >>>SET_COUNTER<<< startup -(startup 2)
  4888.              statusline-off
  4889.            )
  4890.           >>>ELSE<<<
  4891.            ( statusline-on )
  4892.           >>>fi_name<<<
  4893.           \&}}}
  4894.           .\"}}}
  4895.           .\"{{{  handle bit 1, 0=highlighting on
  4896.           \&{{{  handle bit 1, 0=highlighting on
  4897.           >>>IF<<< >(startup 0)
  4898.            ( add-mode-highlighting )
  4899.           >>>ELSE<<<
  4900.            ( delete-mode-highlighting )
  4901.           >>>fi_name<<<
  4902.           \&}}}
  4903.           .\"}}}
  4904.           .\"{{{  slow terminals => no highlighting
  4905.           >>>IF<<< >>>TEST_TERM<<< my-old-slow-terminal
  4906.            ( delete-mode-highlighting )
  4907.           >>>fi_name<<<
  4908.           .\"}}}
  4909.           >>>SET_COUNTER<<< startup 0
  4910.         )
  4911.      )
  4912.      \&}}}
  4913.      .\"}}}
  4914.    )
  4915. )
  4916. \&}}}
  4917. .\"}}}
  4918. .\"{{{  read-new-file-macro
  4919. .eX read-newfile--macro
  4920. .eX >>>DEMAND<<<
  4921. .eX ">>>LOAD<<< >>>NOT<<<"
  4922. \&{{{  read-new-file-macro
  4923. ( >>>DEFMACRO<<< read-newfile-hook
  4924.    ( >>>IF<<< =(startup 0) ( startup-1 ) fi
  4925.      ...  any code for new file handling
  4926.      >>>IF<<< =(startup 0)
  4927.       ( >>>SET_COUNTER<<< startup 1
  4928.         >>>LOAD<<< >>>NOT<<<(startup-fun
  4929.       )
  4930.      >>>fi_name<<<
  4931.    )
  4932. )
  4933. ( >>>DEFAUTO<<< read-newfile-hook )
  4934. \&}}}
  4935. .\"}}}
  4936. .\"{{{  >>>DEFAB<<<
  4937. .eX >>>DEFAB<<<
  4938. \&{{{  >>>DEFAB<<<
  4939. ( >>>DEFMACRO<<< abort-hook ( >>>SET_COUNTER<<< >>>M_O_VAR<<< 0 ) )
  4940. ; maybe you hit abort, while the modified
  4941. ; create fold command is active!
  4942. ( >>>DEFAB<<< abort-hook )
  4943. \&}}}
  4944. .\"}}}
  4945. :   ; your stuff
  4946. .DE
  4947. .\"}}}
  4948. .\"}}}
  4949. .LP
  4950. These examples should give an impression of what can be done using OCL.
  4951. There are more functions/macros stored in the bindings directory.  I am
  4952. sure that you will invent more useful OCL functions/macros.  If you
  4953. wrote a really new and good one, please post it to the USENET newsgroup
  4954. comp.editors.
  4955. .\"}}}
  4956. .\"}}}
  4957. .\"{{{  Mouse extension
  4958. .nH 1 "Mouse extension"
  4959. .LP
  4960. .iX mouse
  4961. On some systems, Origami can be used with a mouse.  The >>>RC_ENDING<<<-file format
  4962. is independent from mouse-support.  If Origami is not able to support the
  4963. mouse, the corresponding information in the >>>RC_ENDING<<<-file is ignored!
  4964. .\"{{{  available mouse-supports
  4965. .nH 2 "Available implementations"
  4966. .LP
  4967. Origami can be used with a mouse in the following window environments:
  4968. .\"{{{  X
  4969. .nH 3 "X"
  4970. .LP
  4971. .iX X
  4972. .iX xterm
  4973. Defining the symbol \fBXTERM\fP at compile time enables the mouse
  4974. support for X.  Running Origami inside a \fBxterm\fP will activate
  4975. \fIsend mouse position on click\fP by sending '\\033[?9s\\033[?9h' to
  4976. the terminal and resetting afterwards.  You can use up to 10 mouse
  4977. buttons.  They are named \fBButton1\fP .. \fBButton10\fP in the
  4978. bindinglist.  The mouse will only be activated, if the environment
  4979. variable \fBTERM\fP is set to \fBxterm\fP or \fBxterm\fP\fIxxx\fP,
  4980. \fIxxx\fP any text.  Pressing the mouse will activate the Origami
  4981. actions.
  4982. .LP
  4983. \fBCut\fP/\fBPaste\fP function can be reached (on a standard xterm) via
  4984. shift mouse button.  See in your xterm- and X manuals for more details
  4985. about mapping the mouse keys.  Use \fBTERM\fP to control the loading of
  4986. different keytables for different terminals!
  4987. .LP
  4988. If Origami is used in an xterm, you can use the command line option
  4989. \fB\-T\fP \fItitle\fP to change the window title to the current
  4990. filename.  After exiting Origami, the title is set to \fItitle\fP.  If
  4991. \fItitle\fP is the empty string, \fBxterm\fP is used.
  4992. .LP
  4993. After reading the window size once from termcap/terminfo, Origami uses
  4994. xterm escape sequences to get the windowsize.
  4995. .\"}}}
  4996. .\"{{{  MGR
  4997. .nH 3 "MGR"
  4998. .LP
  4999. .iX MGR
  5000. Defining the Symbol \fBMGR\fP at compiletime enables the mouse support
  5001. for the Bellcore window manager MGR.  Running Origami will activate
  5002. \fIsend mouse position on click\fP with \fBm_setevent\fP and resetting
  5003. afterwards.  You can use 5 mouse buttons, pressing and releasing the
  5004. button are distinguished.  The buttons are named
  5005. \fBButton1\fP..\fBButton5\fP, \fBButton1Down\fP..\fBButton5Down\fP in
  5006. the bindinglist (MGR does not support \fBButton4\fP and \fBButton5\fP,
  5007. \fBButton1\fP is used for window control).  The mouse will only be
  5008. activated, if the environment variable \fB>>>TERM<<<\fP is set to
  5009. \fBmgr\fP or \fBmgr\fP\fIxxx\fP, \fIxxx\fP any text.  See in your local
  5010. mgr manuals for more information about mouse mapping.  Use
  5011. \fB>>>ORITERM<<<\fP to control the loading of different keytables for
  5012. different terminals!
  5013. .\"}}}
  5014. .\"{{{  MGR + X
  5015. .nH 3 "X and MGR together"
  5016. .LP
  5017. .iX X
  5018. .iX xterm
  5019. .iX MGR
  5020. MGR and X support can be used together, because the MGR mouse support
  5021. uses the escape sequence from the X mouse support to detect a mouse
  5022. click.
  5023. .LP
  5024. Enable both supports by defining XTERM and MGR.
  5025. .LP
  5026. The commandline option \fB\-T\fP works only, if Origami is used in a
  5027. xterm.
  5028. .\"}}}
  5029. .\"}}}
  5030. .\"{{{  multiple supports
  5031. .nH 2 "Multiple Mouse supports"
  5032. .LP
  5033. Different mouse extensions in Origami and keybind (>>>RC_ENDING<<<-file) can be used
  5034. together, if
  5035. .nI
  5036. both use the same `escape sequence' to mark a mouse-click
  5037. .In
  5038. or
  5039. .nI
  5040. Origami scans the mouse itself.
  5041. .In
  5042. In these cases, the mapping of mouse buttons is defined by Origami.
  5043. Otherwise the mouse will not work.
  5044. .\"}}}
  5045. .\"{{{  Using the mouse in OCL
  5046. .nH 2 "Using the mouse in OCL"
  5047. .LP
  5048. .iX xterm
  5049. All keytables, not named like a mouse-support use the default
  5050. mouse-support (\fBxterm\fP).  This can be changed with \fB\-M
  5051. \fP\fIxxx\fP.  If the mouse-support is not set to \fBno-mouse\fP, the
  5052. OCL-tags \fBMOUSY\fP and \fIxxx\fP are set and the mouse-variables are
  5053. defined.  Otherwise, only the buttons are mapped to commands, but the
  5054. mouse-variables are not used and no \fBMOUSY\fP is set!  The mouse can
  5055. be used with
  5056. .\"{{{  normal click
  5057. .LP
  5058. .dX >>>MOUSEMAP<<<
  5059. \fB(>>>MOUSEMAP<<<\fP \fICOMMAND-FOR-1 COMMAND-FOR-2\fP .. \fB)\fP
  5060. .LP
  5061. Pressing the mouse button \fIx\fP (number \fIx\fP in the above mentioned
  5062. namelists) will activate \fICOMMAND-FOR-x\fP, which can be any Origami
  5063. command or OCL function.  If one of the buttons should not be used, bind
  5064. \fBno-operation\fP to it.  Only the button numbers are stored in the
  5065. >>>RC_ENDING<<<-file.  The names are generated by Origami at runtime, depending on
  5066. Origami and its runtime environment.
  5067. .\"}}}
  5068. .\"{{{  menu counter
  5069. .LP
  5070. .iX >>>MENU<<<
  5071. .iX >>>O_LANGUAGE<<<
  5072. If a mouse button is pressed, while \fB>>>O_LANGUAGE<<<\fP or
  5073. \fB>>>MENU<<<\fP is active, the click will not return the above.
  5074. Instead of the mapped command, a coding for the chosen menu item will
  5075. be send.  This is the first character of the chosen item.  Clicks to
  5076. invalid positions will be ignored.
  5077. .\"}}}
  5078. .LP
  5079. .dX no-mouse
  5080. If the chosen mouse-support is not \fBno-mouse\fP, the following OCL
  5081. variables are defined automatically and set on mouse click before
  5082. running the command:
  5083. .\"{{{  table of vars
  5084. .bI ""
  5085. .\"{{{  button
  5086. .bI "\fB>>>MOUSE_B<<<\fP"
  5087. .dX >>>MOUSE_B<<<
  5088. number of pressed button
  5089. .Ib
  5090. .\"}}}
  5091. .\"{{{  outside
  5092. .bI "\fB>>>MOUSE_O<<<\fP"
  5093. .dX >>>MOUSE_O<<<
  5094. .iX "display area"
  5095. code for type of position
  5096. .TS
  5097. tab(|);
  5098. c l.
  5099. value|position
  5100. \-2|clicked on message-line
  5101. \-1|clicked on area
  5102. 0|clicked inside text
  5103. 1|clicked on fold-lines for edited file
  5104. 2|clicked outside text
  5105. .TE
  5106. .Ib
  5107. .\"}}}
  5108. .\"{{{  buffer
  5109. .bI "\fB>>>MOUSE_W<<<\fP"
  5110. .dX >>>MOUSE_W<<<
  5111.    number of buffer
  5112. .br
  5113. or
  5114. .br
  5115.    number of used buffers, if clicked on message line or area
  5116. .Ib
  5117. .\"}}}
  5118. .\"{{{  column
  5119. .bI "\fB>>>MOUSE_X<<<\fP"
  5120. .dX >>>MOUSE_X<<<
  5121. .iX "display area"
  5122. column number
  5123. .br
  5124. Inside text you can use \fB>>>GOTO_COUNTER<<<\fP to reach the position.
  5125. .Ib
  5126. .\"}}}
  5127. .\"{{{  line
  5128. .bI "\fB>>>MOUSE_Y<<<\fP"
  5129. .dX >>>MOUSE_Y<<<
  5130. .iX "display area"
  5131. line number of mouse position, if in text or area
  5132. .br
  5133. Inside text you can use \fB>>>O_GOTO_LINE<<<\fP to reach the position.
  5134. .Ib
  5135. .\"}}}
  5136. .\"{{{  steps up/down
  5137. .bI "\fB>>>MOUSE_G<<<\fP"
  5138. .dX >>>MOUSE_G<<<
  5139. contains the number of steps up/down, if inside text
  5140. .br
  5141. Use \fB>>>O_DOWN<<<\fP (or \fB>>>O_UP<<<\fP if negative) to reach the
  5142. position.
  5143. .Ib
  5144. .\"}}}
  5145. .Ib
  5146. .\"}}}
  5147. .\"}}}
  5148. .\"}}}
  5149. .\"{{{  Miscellaneous
  5150. .nH 1 "Miscellaneous"
  5151. .LP
  5152. If a document is to be loaded for the first time you should verify that
  5153. it does not contain strings which could be misinterpreted as fold marks
  5154. by Origami.  The following simple shell script looks for such strings.
  5155. .eX mark
  5156. .DS
  5157. fgrep '{\&{\&{' <filename>
  5158. fgrep '}\&}\&}' <filename>
  5159. fgrep ':\&:\&:' <filename>
  5160. .DE
  5161. .\"}}}
  5162. .\"{{{  Copyrights
  5163. .nH 1 "Copyright appointments"
  5164. .LP
  5165. This chapter was not included in earlier versions, but a discussion on
  5166. USENET convinced me to write it.  Please read it carefully.
  5167. .LP
  5168. Each part of this software can and must be copied free.  If you copy
  5169. binaries, you must not prevent people from also copying sources.  You
  5170. must not remove my name from this program.  If you want to use parts of
  5171. it for your own purposes, point out what is your code and what is mine.
  5172. You use this software completely at your own risk.
  5173. .LP
  5174. No part of this software may be used for military purposes.
  5175. No exceptions will be made to this clause.
  5176. .LP
  5177. If someone wants to use this software even in part for
  5178. commercial purposes,  a written non exclusive license is needed.
  5179. .LP
  5180. There are no long remarks in the other files of this package about
  5181. copyright because program code and comments about it are two different
  5182. things, but the above conditions are valid for the whole package!
  5183. .\"}}}
  5184. .\"{{{  Acknowledgements
  5185. .nH 1 "Acknowledgements"
  5186. .LP
  5187. Most of this manual was written by me, but the original was written by
  5188. someone else, who did not leave his name in it.  The concept of the
  5189. folding editor was originally implemented as part of the Transputer
  5190. development system at INMOS Ltd., Bristol, UK.  The editor was a part of
  5191. the TDS D700, and was written in Occam.  It first ran on a 68000 based
  5192. Sage/Stride development system, and later was Transputer resident on the
  5193. PC development system.
  5194. .LP
  5195. Origami was rewritten from scratch in Turbo Pascal by Martin Green while
  5196. at Ferranti Ltd, Cheadle Heath, Stockport, England, and used the same
  5197. key mappings and editor functions as the TDS editor.
  5198. .LP
  5199. It was then converted from Turbo Pascal by p2c and ported by Charlie
  5200. Lawrence, while at Eastman Kodak Co.  He added lex/yacc based keyfiles,
  5201. and did the considerable work needed to get it running in C.
  5202. .LP
  5203. I fixed some bugs in memory management and elsewhere, ported it to
  5204. MINIX and later to Linux, changed its user interface to look more
  5205. Emacs-like and added new features.  Wolfgang Stumvoll (stumvoll\*(ac)
  5206. wrote the OCL code and the keybind compiler.  He also made beta tests of
  5207. all my new versions by using them for his daily work, which helped a lot
  5208. to find existing and new bugs.  Last but not least, he wrote the OCL
  5209. fill-paragraph, goto-matching-fence and towers-of-hanoi functions.  Both of
  5210. us made a general code clean up, which was much overdue.
  5211. .LP
  5212. Michael Schwingen (michaels\*(ac) ported Origami to Atari TOS and fixed
  5213. a few minor bugs.  He decided against his port being archived on the ftp
  5214. server mentioned below, so only he knows about the available version and
  5215. where to get it.
  5216. .LP
  5217. Thomas Hadig (hadig\*(ac) ported Origami to Amiga DOS.  His port is available
  5218. on the below mentioned ftp server.  Usually, it is up to date with the current
  5219. official release.
  5220. .LP
  5221. Robert Blum (blum\*(ac) once ported an early version back to MS/PC DOS.
  5222. .LP
  5223. Andrew Miller (windy\*(ac) spent much time proofreading the
  5224. documentation and is still writing the vi Emulation.  He tested most new
  5225. versions on his MINIX machine as well.
  5226. .LP
  5227. Stephen R.\& van den Berg (berg\*(ac) provided the POSIX compatible
  5228. `Better/BuGless/Berg Regular Expression' library (bregex).
  5229. .LP
  5230. There are too many other people in different nets all around the world, who helped
  5231. with small tips, bug reports etc.\& to improve Origami.  Thanks to all
  5232. of you.
  5233. .LP
  5234. I maintain the whole Origami source code, which means that I will answer
  5235. or forward mail concerning Origami, decide if and how extensions should
  5236. be made, give advices for people who are porting it, post new UN*X
  5237. versions and update the documentation.  I put new releases of
  5238. Origami on the ftp archive ftp.thp.uni-koeln.de [134.95.64.1], path
  5239. pub/linux/origami.  If you can not reach that server, try [134.95.80.1],
  5240. path pub/thp/linux/origami.
  5241. .\"}}}
  5242. .\"{{{  Appendixes
  5243. .nH 1 "Appendixes"
  5244. .\"{{{  re
  5245. .nH 2 "Regular expressions"
  5246. .LP
  5247. This version of Origami supports regular expression search and replace.
  5248. Origamis regular expressions widely conform \fBPOSIX\fP
  5249. \fBextended\fP/\fBbasic\fP regular expressions.
  5250. .\"{{{  search syntax
  5251. .nH 3 "Regular search expressions"
  5252. .LP
  5253. Due to the internal text representation, it is impossible to use regular
  5254. expressions matching strings, containing newline characters.
  5255. .LP
  5256. Origami does not support \fBbackreference expression\fPs in basic regular
  5257. search expressions.
  5258. .LP
  5259. The following is a table of known operators in basic/extended regular
  5260. expressions.  Refer to your local regular expression documentation for more
  5261. details.  basic (extended) regular subexpressions are marked with
  5262. \fIBRegExp\fP(\fIExRegExp\fP).
  5263. .\"{{{  table of commands
  5264. .TS
  5265. center tab(@);
  5266. c c.
  5267. \fBbasic\fP@\fBextended\fP
  5268.  
  5269. .\"{{{  char
  5270. .T&
  5271. c c
  5272. l s.
  5273. \fIc\fP@\fIc\fP
  5274. T{
  5275. Each character, not used for special purpose, matches itself.
  5276. T}
  5277.  
  5278.  
  5279. .\"}}}
  5280. .\"{{{  .
  5281. .T&
  5282. c c
  5283. l s.
  5284. \fB.\fP@\fB.\fP
  5285. T{
  5286. .dX .
  5287. Matches any single character.
  5288. T}
  5289.  
  5290.  
  5291. .\"}}}
  5292. .\"{{{  []
  5293. .T&
  5294. c c
  5295. c c
  5296. l s.
  5297. \fB[\fP\fIclass\fP\fB]\fP@\fB[\fP\fIclass\fP\fB]\fP
  5298. \fB[^\fP\fIclass\fP\fB]\fP@\fB[^\fP\fIclass\fP\fB]\fP
  5299. T{
  5300. .dX [
  5301. .dX ]
  5302. .iX set
  5303. Matches a character [not] given in the brackets.  \fIclass\fP can be a
  5304. list of:
  5305. .br
  5306.   \fIchar\fP - a single character
  5307. .br
  5308.   character range - marked with \fIchar\fP\fB\-\fP\fIchar\fP
  5309. .br
  5310. or
  5311. .br
  5312.   \fB[:\fP\fIset\fP\fB:]\fP - \fIset\fP=\fB>>>ALPHA_STR<<<\fP, ..
  5313. .br
  5314.     \fIset\fP is a predefined character set
  5315. .br
  5316.     user defined sets cannot be used
  5317.  
  5318. .iX "character set"
  5319. .br
  5320. .br
  5321. The following expressions are currently not support:
  5322. .br
  5323. .br
  5324.   Collating symbols \fB[. .]\fP
  5325. .br
  5326.   Equivalence class expressions \fB[= =]\fP
  5327. T}
  5328.  
  5329.  
  5330. .\"}}}
  5331. .\"{{{  ^
  5332. .T&
  5333. c c
  5334. l s.
  5335. \fB^\fP@\fB^\fP
  5336. T{
  5337. .dX ^
  5338. Matches the start of the line, if used at the start of an expression.
  5339. T}
  5340.  
  5341.  
  5342. .\"}}}
  5343. .\"{{{  $
  5344. .T&
  5345. c c
  5346. l s.
  5347. \fB$\fP@\fB$\fP
  5348. T{
  5349. .dX $
  5350. Matches the end of the line, if used at the end of an expression.
  5351. T}
  5352.  
  5353.  
  5354. .\"}}}
  5355. .\"{{{  RE RE
  5356. .T&
  5357. c c
  5358. l s.
  5359. \fIBRegExp\fP\h'\w'|'u'\fIBRegExp\fP@\fIExRegExp\fP\h'\w'|'u'\fIExRegExp\fP
  5360. T{
  5361. Matches the concatenation of strings, matching the first/second regular
  5362. expressions.
  5363. T}
  5364.  
  5365.  
  5366. .\"}}}
  5367. .\"{{{  ()
  5368. .T&
  5369. c c
  5370. l s.
  5371. \fB\e(\fP\fIBRegExp\fP\fB\e)\fP@\fB(\fP\fIExRegExp\fP\fB)\fP
  5372. T{
  5373. .dX (
  5374. .dX )
  5375. Group the enclosed regular expression, which can be accessed by \fB\e\fP\fIx\fP
  5376. in the replace pattern.
  5377. T}
  5378.  
  5379.  
  5380. .\"}}}
  5381. .\"{{{  |
  5382. .T&
  5383. c c
  5384. l s.
  5385. \fIBRegExp\fP\fB\e|\fP\fIBRegExp\fP@\fIExRegExp\fP\fB|\fP\fIExRegExp\fP
  5386. T{
  5387. .dX |
  5388. Matches a string, matching one of the given regular expressions.
  5389. .br
  5390. \fBN.B.\fP: \fB\e|\fP is an extension in basic regular expressions.
  5391. T}
  5392.  
  5393.  
  5394. .\"}}}
  5395. .\"{{{  +
  5396. .T&
  5397. c c
  5398. l s.
  5399. \fIBRegExp\fP\fB\e+\fP@\fIExRegExp\fP\fB+\fP
  5400. T{
  5401. .dX +
  5402. Matches one or more occurances of the given regular expression.
  5403. .br
  5404. \fBN.B.\fP: \fB\e+\fP is an extension in basic regular expressions.
  5405. T}
  5406.  
  5407.  
  5408. .\"}}}
  5409. .\"{{{  ?
  5410. .T&
  5411. c c
  5412. l s.
  5413. \fIBRegExp\fP\fB\e?\fP@\fIExRegExp\fP\fB?\fP
  5414. T{
  5415. .dX ?
  5416. Matches zero or one occurances of the given regular expression.
  5417. .br
  5418. \fBN.B.\fP: \fB\e?\fP is an extension in basic regular expressions.
  5419. T}
  5420.  
  5421.  
  5422. .\"}}}
  5423. .\"{{{  *
  5424. .T&
  5425. c c
  5426. l s.
  5427. \fIBRegExp\fP\fB*\fP@\fIExRegExp\fP\fB*\fP
  5428. T{
  5429. .dX *
  5430. Matches zero or more occurances of the given regular expression.
  5431. T}
  5432.  
  5433.  
  5434. .\"}}}
  5435. .\"{{{  {}
  5436. .T&
  5437. c c
  5438. c c
  5439. l s.
  5440. \fIBRegExp\fP\fB\e{\fP\fIn\fP\fB\e}\fP@\fIExRegExp\fP\fB{\fP\fIn\fP\fB}\fP
  5441. \fIBRegExp\fP\fB\e{\fP\fIn\fP\fB,\fP\fIm\fP\fB\e}\fP@\fIExRegExp\fP\fB{\fP\fIn\fP\fB,\fP\fIm\fP\fB}\fP
  5442. T{
  5443. .dX {
  5444. .dX }
  5445. Repeats the regular expression \fIn\fP [to \fIm\fP] times.  \fIn\fP[,\fIm\fP]
  5446. have to be decimals, 0<=\fIn\fP[<=\fIm\fP].
  5447. T}
  5448.  
  5449.  
  5450. .\"}}}
  5451. .\"{{{  !
  5452. .T&
  5453. c c
  5454. l s.
  5455. \fB\e!\fP\fIBRegExp\fP@\fB!\fP\fIExRegExp\fP
  5456. T{
  5457. .dX !
  5458. Match the next line, not containing the following regular expression.
  5459. [\fB\e\fP]\fB!\fP is only allowed at the beginning of a regular
  5460. expression.
  5461. .br
  5462. \fBN.B.\fP: [\fB\e\fP]\fB!\fP is an extension in basic and extended
  5463. regular expressions.
  5464. T}
  5465.  
  5466.  
  5467. .\"}}}
  5468. .TE
  5469. .\"}}}
  5470. .\"}}}
  5471. .\"{{{  replace syntax
  5472. .nH 3 "Regular replace expressions"
  5473. .LP
  5474. Inside regular expression search and replace, the replace pattern may
  5475. contain the following subexpressions:
  5476. .\"{{{  table of commands
  5477. .TS
  5478. center tab(@);
  5479. c c.
  5480. \fBbasic\fP@\fBextended\fP
  5481.  
  5482. .\"{{{  char
  5483. .T&
  5484. c c
  5485. l s.
  5486. \fIcharacter\fP@\fIcharacter\fP
  5487. T{
  5488. Each character, not used for special purpose.
  5489. T}
  5490.  
  5491.  
  5492. .\"}}}
  5493. .\"{{{  \N
  5494. .T&
  5495. c c
  5496. l s.
  5497. \fB\e\fP\fIN\fP@\fB\e\fP\fIN\fP
  5498. T{
  5499. .dX \\\\e
  5500. Is the text, matched by the \fIN\fP-th group.
  5501. .br
  5502. This can only be used, if there is a corresponding \fB(\fP..\fB)\fP pair
  5503. in the search expression!
  5504. .br
  5505. \fIN\fP is [\fBg\fP\fIdigit\fP]*\fIdigit\fP (\fBg\fP is used, to mark
  5506. numbers >9!).
  5507. T}
  5508.  
  5509.  
  5510. .\"}}}
  5511. .\"{{{  \uN
  5512. .T&
  5513. c c
  5514. l s.
  5515. \fB\eu\fP\fIN\fP@\fB\eu\fP\fIN\fP
  5516. T{
  5517. .dX \\\\eu
  5518. Is the text, matched by the \fIN\fP-th group with lowercase letters
  5519. converted to uppercase.
  5520. .br
  5521. This can only be used, if there is a corresponding \fB(\fP..\fB)\fP pair
  5522. in the search expression!
  5523. .br
  5524. \fIN\fP is [\fBg\fP\fIdigit\fP]*\fIdigit\fP (\fBg\fP is used, to mark
  5525. numbers >9!).
  5526. T}
  5527.  
  5528.  
  5529. .\"}}}
  5530. .\"{{{  \lN
  5531. .T&
  5532. c c
  5533. l s.
  5534. \fB\el\fP\fIN\fP@\fB\el\fP\fIN\fP
  5535. T{
  5536. .dX \\\\el
  5537. Is the text, matched by the \fIN\fP-th group with uppercase letters
  5538. converted to lowercase.
  5539. .br
  5540. This can only be used, if there is a corresponding \fB(\fP..\fB)\fP pair
  5541. in the search expression!
  5542. .br
  5543. \fIN\fP is [\fBg\fP\fIdigit\fP]*\fIdigit\fP (\fBg\fP is used, to mark
  5544. numbers >9!).
  5545. T}
  5546.  
  5547.  
  5548. .\"}}}
  5549. .\"{{{  \{Nexpr}
  5550. .T&
  5551. c c
  5552. l s.
  5553. \fB\e{\fP\fINexpr\fP\fB}\fP@\fB\e{\fP\fINexpr\fP\fB}\fP
  5554. T{
  5555. .iX \\\\e
  5556. .dX \\\\e{
  5557. .dX {
  5558. .dX }
  5559. Use the first characters of \fIexpr\fP, up to the length of the
  5560. \fIN\fP-th group in the search string.  If \fIexpr\fP is not long
  5561. enough, the last character will be repeated up to the needed length.  If
  5562. \fIfIexpr\fP is the empty string, space will be used for padding.
  5563. .dX \\\\e0
  5564. \fB\e0\fP can be used as last character in \fIexpr\fP to suppress padding.
  5565. .br
  5566. This can only be used, if there is a corresponding \fB(\fP..\fB)\fP pair
  5567. in the search expression!
  5568. .br
  5569. \fIN\fP is [\fBg\fP\fIdigit\fP]*\fIdigit\fP (\fBg\fP is used, to mark
  5570. numbers >9!).
  5571. T}
  5572.  
  5573.  
  5574. .\"}}}
  5575. .\"{{{  \?Nexpr}
  5576. .T&
  5577. c c
  5578. l s.
  5579. \fB\e?\fP\fINexpr\fP\fB}\fP@\fB\e?\fP\fINexpr\fP\fB}\fP
  5580. T{
  5581. .iX \\\\e
  5582. .dX \\\\e?
  5583. .dX ?
  5584. .dX }
  5585. If the \fIn\fP-th group matched, add \fIexpr\fP, otherwise the empty
  5586. string.
  5587. .br
  5588. \fIN\fP is [\fBg\fP\fIdigit\fP]*\fIdigit\fP (\fBg\fP is used, to mark
  5589. numbers >9!).
  5590. T}
  5591.  
  5592.  
  5593. .\"}}}
  5594. .\"{{{  \!Nexpr}
  5595. .T&
  5596. c c
  5597. l s.
  5598. \fB\e!\fP\fINexpr\fP\fB}\fP@\fB\e!\fP\fINexpr\fP\fB}\fP
  5599. T{
  5600. .iX \\\\e
  5601. .dX \\\\e!
  5602. .dX !
  5603. .dX }
  5604. If the \fIn\fP-th group did not match, add \fIexpr\fP, otherwise the
  5605. empty string.
  5606. .br
  5607. \fIN\fP is [\fBg\fP\fIdigit\fP]*\fIdigit\fP (\fBg\fP is used, to mark
  5608. numbers >9!).
  5609. T}
  5610.  
  5611.  
  5612. .\"}}}
  5613. .\"{{{  \}
  5614. .T&
  5615. c c
  5616. l s.
  5617. \fB\e}\fP@\fB\e}\fP
  5618. T{
  5619. .iX \\\\e
  5620. Use inside of complex replace expressions to generate a single \fB}\fP.
  5621. T}
  5622.  
  5623.  
  5624. .\"}}}
  5625. .\"{{{  \ \ ;
  5626. .T&
  5627. c c
  5628. l s.
  5629. \fB\e\e\fP@\fB\e\e\fP
  5630. T{
  5631. .iX \\\\e
  5632. Represent \fB\e\fP.
  5633. T}
  5634.  
  5635.  
  5636. .\"}}}
  5637. .TE
  5638. .\"}}}
  5639. .\"}}}
  5640. .\"}}}
  5641. .bp
  5642. .\"{{{  messages
  5643. .nH 2 "Messages"
  5644. .\"{{{  what are the messages
  5645. .LP
  5646. .iX ".origami>>>MSG_ENDING<<<"
  5647. The following is the list of all messages, Origami can display and
  5648. which can be used in OCL-commands using the Origami messages. They are
  5649. stored in the file \fB.origami>>>MSG_ENDING<<<\fP and can be changed by editing this
  5650. file. If you are doing this, do not change the length of the lines, the
  5651. type and order of the used formats.
  5652. .\"}}}
  5653. .\"{{{  description of types
  5654. .LP
  5655. Different messages are used in different ways. The first character of
  5656. the message-name indicates the usage:
  5657. .\"{{{  known tags
  5658. .nI
  5659. .TS
  5660. tab(|);
  5661. l l.
  5662. \fBD\fP|display-characters:
  5663. |specifying some display-details
  5664. \fBF\fP|format strings:
  5665. |should only used with \fB>>>LASTMES<<<\fP
  5666. \fBI\fP|prompt strings:
  5667. |first character is used for \fByes\fP,..
  5668. \fBM\fP|strings to be displayed
  5669. .TE
  5670. .In
  5671. .\"}}}
  5672. .LP
  5673. If \fBF_\fP\fIxxx\fP messages are used inside OCL-prompts, string
  5674. arguments are replaced by empty strings, integer and character arguments
  5675. are replaced by undefined numbers/characters.
  5676. .\"}}}
  5677. .LP
  5678. The known messages are:
  5679. .\"{{{  list of messages (automatically generated by make!)
  5680. .so msg.AMS
  5681. .\"}}}
  5682. .\"}}}
  5683. .bp
  5684. .\"{{{  OCL-assembler
  5685. .nH 2 "OCL-assembler"
  5686. .LP
  5687. .nH 3 "Syntax"
  5688. .LP
  5689. There are commands with different kinds of arguments.  The following
  5690. command-types are known:
  5691. .\"{{{  table of known types
  5692. .nI
  5693. .ne 8
  5694. .TS
  5695. center tab(|);
  5696. l l.
  5697. COM|without arguments
  5698. COM_I|with variable/integer argument
  5699. COM_C|with character argument
  5700. COM_A|with address argument
  5701. COM_II|with 2 variable/integer arguments
  5702. COM_P|with message-string argument
  5703. COM_IP|with variable/integer and message-string arguments
  5704. COM_IIP|with 2 variable/integer and message-string arguments
  5705. .TE
  5706. .In
  5707. .\"}}}
  5708. .LP
  5709. OCL-assembler statements are (OCL-assembler programs are not handled by
  5710. the optimizer!):
  5711. .\"{{{  label
  5712. .bI "\fB\&.\fP\fIlabel\fP
  5713. Each unused identifier can be used as a label.  No code will be
  5714. generated, but \fIlabel\fP can be used for jump-commands.  The
  5715. definition of a label has to be marked with a leading \fB.\fP.
  5716. .Ib
  5717. .\"}}}
  5718. .\"{{{  origami functions/macros
  5719. .bI "Origami functions and macros"
  5720. All Origami functions and OCL-macros with length 1 (\fB>>>DEFMACRO<<<\fPs or
  5721. single command \fB>>>DEFOP<<<\fPs or \fBinit_fun\fPs).
  5722. .Ib
  5723. .\"}}}
  5724. .\"{{{  >>>EVAL<<<
  5725. .bI "\fB>>>EVAL<<< (\fP \fIstatement\fP ... \fB)\fP"
  5726. Compile the OCL program '\fIstatement\fP ...'.  The assembler program
  5727. calls it as subroutine.  The compiled list of OCL-statements might be
  5728. optimized.
  5729. .Ib
  5730. .\"}}}
  5731. .\"{{{  number
  5732. .sI "\fBnumber\fP"
  5733. .Is
  5734. .\"}}}
  5735. .\"{{{  text
  5736. .sI \fB"\fP\fItext\fP
  5737. .Is
  5738. .\"}}}
  5739. .\"{{{  statement
  5740. .bI "\fIcommand\fP [\fIargument\fP [\fIargument\fP [\fIargument\fP]]]
  5741. \fIcommand\fP is one of the OCL-assembler statements, explained below.
  5742. \fIargument\fPs are (depending on commandtype of \fIstatement\fP):
  5743. .\"{{{  int
  5744. .bI "integer argument:"
  5745. .\"{{{  var
  5746. .bI "[\fB+\fP \fInumber\fP] ... \fIvariable-name\fP"
  5747. The following variable names are hidden variables, used by keybind to
  5748. code the OCL-statements.  These variables can be used only in
  5749. OCL-assembler code directly!
  5750. .TS
  5751. tab(|);
  5752. l l.
  5753. \fB(dummy\fP\fIx\fP\fB)\fP,\fIx\fP=0,1,...|term evaluation
  5754. \fB(arg\fP\fIx\fP\fB)\fP,\fIx\fP=0,1,...|argument passing
  5755. \fB(loc\fP\fIx\fP\fB)\fP,\fIx\fP=0,1,...|save arguments
  5756. \fB(repeat)\fP|used for \fB>>>REPEAT<<<\fP
  5757. \fB(return)\fP|return value for functions/macros
  5758. \fB(rel_op)\fP|\fB<\fP,.. #arguments > 2
  5759. .TE
  5760. .Ib
  5761. .\"}}}
  5762. .\"{{{  number
  5763. .bI "[\fB+\fP \fInumber\fP] ... \fIvar-address\fP"
  5764. \fIvar-address\fP is a non negative integer constant.
  5765. .Ib
  5766. .\"}}}
  5767. .\"{{{  msg
  5768. .bI "[\fB+\fP \fInumber\fP] ... \fImessage-name\fP"
  5769. The coding of \fImessage-name\fP, which is one of the above listed
  5770. messages, stored in \fB.origami>>>MSG_ENDING<<<\fP.
  5771. .Ib
  5772. .\"}}}
  5773. .Ib
  5774. .\"}}}
  5775. .\"{{{  char
  5776. .bI "character argument:"
  5777. .sI "\fInumber\fP, \fInumber\fP>=0"
  5778. .Is
  5779. .sI \fB"\fP\fIcharacter\fP
  5780. .Is
  5781. .Ib
  5782. .\"}}}
  5783. .\"{{{  address
  5784. .bI "address argument:"
  5785. .\"{{{  label
  5786. .bI "[\fB+\fP \fInumber\fP] ... \fIlabel\fP"
  5787. Use address \fIlabel\fP with given offset as target address.
  5788. .Ib
  5789. .\"}}}
  5790. .\"{{{  offset
  5791. .bI "[\fB+\fP \fInumber\fP] ... \fIjump-offset\fP"
  5792. Use the sum of given values as relative jump offset.
  5793. .Ib
  5794. .\"}}}
  5795. .Ib
  5796. .\"}}}
  5797. .\"{{{  message-strings
  5798. .bI "message-string argument"
  5799. \fImessage-string\fP uses the same syntax as in normal OCL-statements.
  5800. You have to add a \fBM_END_MACRO\fP yourself, to mark the end of the
  5801. message-string!
  5802. .LP
  5803. For example:
  5804. .sI "\fBM_PROMPT 2 ( M_ABORTED >>>COUNTER<<< x ) M_END_MACRO\fP"
  5805. .Is
  5806. .Ib
  5807. .\"}}}
  5808. .Ib
  5809. .\"}}}
  5810. .nH 3 "Commands"
  5811. .LP
  5812. .\"{{{  table of commands (automatically generated by make!)
  5813. The permission tags, used in the following table mean:
  5814. .\"{{{  *
  5815. .bI *
  5816. Always allowed, handled in innermost OCL-automat.
  5817. .Ib
  5818. .\"}}}
  5819. .\"{{{  -
  5820. .bI -
  5821. Allowed, if no view-mode, folding or other restrictions are active.
  5822. .Ib
  5823. .\"}}}
  5824. .\"{{{  V
  5825. .bI V
  5826. .iX view-mode
  5827. Allowed during view.
  5828. .Ib
  5829. .\"}}}
  5830. .\"{{{  P
  5831. .bI P
  5832. Allowed in prompts.
  5833. .Ib
  5834. .\"}}}
  5835. .\"{{{  F
  5836. .bI F
  5837. .iX >>>O_CREATE_FOLD<<<
  5838. Allowed during create fold.
  5839. .Ib
  5840. .\"}}}
  5841. .\"{{{  f
  5842. .bI f
  5843. .iX >>>O_CREATE_FOLD<<<
  5844. Not allow during create fold, but can be used, while the extended
  5845. highlighting is active.
  5846. .Ib
  5847. .\"}}}
  5848. The known assembler statements are:
  5849. .so token.AMS
  5850. .\"}}}
  5851. .\"}}}
  5852. .bp
  5853. .\"{{{  command line options
  5854. .nH 2 "Command line options"
  5855. .LP
  5856. The following is part of the online help.  Origamis usage is
  5857. .DS
  5858. \fBorigami\fP [\fIoption\fP ...] [\fIfile\fP ...]
  5859. .DE
  5860. where \fIoptions\fP can be:
  5861. .\"{{{  list off known options
  5862. .\"{{{  define iP: [.Ib] .bI
  5863. .nr iP 0
  5864. .de iP
  5865. .ie \\n(iT .Ib
  5866. .el .nr iT 1
  5867. .bI "\\$1"
  5868. ..
  5869. .\"}}}
  5870. .\"{{{F ../man/o-opt.sed.MAN
  5871. .\":::F ../man/o-opt.sed.MAN
  5872. .\"}}}
  5873. .so ../man/o-opt.sed.MAN
  5874. .Ib
  5875. .\"}}}
  5876. .\"}}}
  5877. .bp
  5878. .\"{{{  compiletime configuration
  5879. .nH 2 "Compiletime Configuration"
  5880. .LP
  5881. There are many parameters, which can be changed at compiletime.  More
  5882. details about changings these constants are given in the source of this
  5883. distribution. A short list of the possible changes follows.
  5884. .wA
  5885. Changing these constants may produce incompatible >>>RC_ENDING<<<-files!
  5886. .\"{{{  Languages
  5887. .bI "Languages"
  5888. The predefined languages for fold hiding can be changed.
  5889. .Ib
  5890. .\"}}}
  5891. .\"{{{  constants
  5892. .bI "Constants"
  5893. Some constants describing table sizes and string length:
  5894. .\"{{{  DEFAULT_LINELEN
  5895. .sI "linelength (>>>LINELEN<<<)"
  5896. .Is
  5897. .\"}}}
  5898. .\"{{{  TDS_LEN
  5899. .sI "length of TDS lines (>>>TDS_LEN<<<)"
  5900. .Is
  5901. .iX TDS
  5902. .iX language
  5903. .\"}}}
  5904. .\"{{{  FOLD_COMMENT_LENGTH
  5905. .sI "length of user comment strings (>>>FOLD_COMMENT_LENGTH<<<)"
  5906. .Is
  5907. .iX comment
  5908. .iX folding
  5909. .iX language
  5910. .dX >>>O_LANGUAGE<<<
  5911. .\"}}}
  5912. .\"{{{  SHORT_F_C_LENGTH
  5913. .sI "cut length for user comment strings in statusline(>>>SHORT_F_C_LENGTH<<<)"
  5914. .Is
  5915. .iX folding
  5916. .iX comment
  5917. .dX >>>O_LANGUAGE<<<
  5918. .iX language
  5919. .iX "status line"
  5920. .\"}}}
  5921. .\"{{{  DEFAULT_UNDEL
  5922. .sI "size of delete-buffer (>>>UNDEL_LINES<<<)"
  5923. .Is
  5924. .iX "delete buffer"
  5925. .iX >>>O_DEL_LINE<<<
  5926. .\"}}}
  5927. .\"{{{  MAX_MACRO_LENGTH   
  5928. .sI "length of keyboard macros (>>>MAX_MACRO_LENGTH<<<)"
  5929. .Is
  5930. .iX >>>O_DEF_MACRO<<<
  5931. .iX macro
  5932. .\"}}}
  5933. .\"{{{  NAME_LG
  5934. .sI "identifier length (>>>NAME_LG<<<)"
  5935. .Is
  5936. .iX name
  5937. .\"}}}
  5938. .\"{{{  BIND_NAME_LEN
  5939. .sI "length of binding names and command line aliases (>>>BIND_NAME_LEN<<<)"
  5940. .Is
  5941. .iX >>>BINDNAME<<<
  5942. .iX "Command line options"
  5943. .\"}}}
  5944. .\"{{{  FOLD_PATTERN_LEN
  5945. .sI "length of mark names (>>>FOLD_PATTERN_LEN<<<)"
  5946. .Is
  5947. .iX >>>DEFMARK<<<
  5948. .\"}}}
  5949. .\"{{{  ALIAS_LG
  5950. .sI "length of keysequences (>>>ALIAS_LG<<<)"
  5951. .Is
  5952. .iX keysequence
  5953. .iX >>>KEYALIAS<<<
  5954. .iX >>>KEYDEF<<<
  5955. .\"}}}
  5956. .\"{{{  RC_HELP_LEN
  5957. .sI "line length in help (>>>RC_HELP_LEN<<<)"
  5958. .Is
  5959. .iX .origamirc
  5960. .iX .origami>>>HELP_ENDING<<<
  5961. .\"}}}
  5962. .\"{{{  OCL_CODE_LEN
  5963. .sI "OCL statement length (>>>OCL_CODE_LEN<<<)"
  5964. .Is
  5965. .iX macro
  5966. .iX function
  5967. .\"}}}
  5968. .\"{{{  OCL_FILE_DEPTH
  5969. .sI "OCL filed-fold stack depth (>>>OCL_FILE_DEPTH<<<)"
  5970. .Is
  5971. .\"}}}
  5972. .\"{{{  MODE_COUNT
  5973. .sI "number of user modes (>>>MODE_COUNT<<<)"
  5974. .Is
  5975. .iX >>>DEFMODE<<<
  5976. .\"}}}
  5977. .\"{{{  MIN_ALARMTIME
  5978. .sI "minimum auto-save time (>>>MIN_ALARMTIME<<<)"
  5979. .Is
  5980. .iX autosave-mode
  5981. .iX >>>O_A_AUTO_SAVE<<<
  5982. .iX >>>O_D_AUTO_SAVE<<<
  5983. .\"}}}
  5984. .\"{{{  MAX_ALARMTIME
  5985. .sI "maximum auto-save time (>>>MAX_ALARMTIME<<<)"
  5986. .Is
  5987. .iX autosave-mode
  5988. .iX >>>O_A_AUTO_SAVE<<<
  5989. .iX >>>O_D_AUTO_SAVE<<<
  5990. .\"}}}
  5991. .\"{{{  NORM_ALARMTIME
  5992. .sI "default auto-save time (>>>NORM_ALARMTIME<<<)"
  5993. .Is
  5994. .iX autosave-mode
  5995. .iX >>>O_A_AUTO_SAVE<<<
  5996. .iX >>>O_D_AUTO_SAVE<<<
  5997. .\"}}}
  5998. .\"{{{  HISTORY_SIZE
  5999. .sI "history minimum size (>>>HISTORY_SIZE<<<)"
  6000. .Is
  6001. .iX history
  6002. .\"}}}
  6003. .\"{{{  HISTORY_MAX    
  6004. .sI "history maximum size (>>>HISTORY_MAX<<<)"
  6005. .Is
  6006. .iX history
  6007. .\"}}}
  6008. .\"{{{  NO_OCL_CMD_OPTS
  6009. .sI "number of command line aliases (>>>NO_OCL_CMD_OPTS<<<)"
  6010. .Is
  6011. .iX "Command line options"
  6012. .\"}}}
  6013. .\"{{{  DIM_OCL_CMD_OPTS
  6014. .sI "dimension of \fB>>>OCL_ARG_RECORD_V<<<\fP (>>>DIM_OCL_CMD_OPTS<<<)"
  6015. .Is
  6016. .iX ">>>OCL_ARG_RECORD_V<<<"
  6017. .\"}}}
  6018. .\"{{{  number of regular expression patterns
  6019. .sI "regular replace patterns (>>>PAT_COUNT<<<)"
  6020. .Is
  6021. .iX regular expression
  6022. .\"}}}
  6023. .Ib
  6024. .\"}}}
  6025. .\"{{{  env-vars
  6026. .bI "Environment variables"
  6027. The names for the environment variables:
  6028. .\"{{{  HOME
  6029. .sI \fB>>>HOME<<<\fP
  6030. .Is
  6031. .iX >>>HOME<<<
  6032. .\"}}}
  6033. .\"{{{  TERM
  6034. .sI \fB>>>TERM<<<\fP
  6035. .Is
  6036. .iX >>>TERM<<<
  6037. .\"}}}
  6038. .\"{{{  SHELL
  6039. .sI \fB>>>SHELL<<<\fP
  6040. .Is
  6041. .iX >>>SHELL<<<
  6042. .\"}}}
  6043. .Ib
  6044. .\"}}}
  6045. .\"{{{  strings
  6046. .bI "Strings"
  6047. You can change the following strings:
  6048. .\"{{{  msg
  6049. .bI "\fB\&.origami>>>MSG_ENDING<<<\fP"
  6050. .iX ".origami>>>MSG_ENDING<<<"
  6051. All formats, given in \fB.origami>>>MSG_ENDING<<<\fP can be changed by changing the
  6052. default file.
  6053. .Ib
  6054. .\"}}}
  6055. .\"{{{  ORIGAMI_RC_PATH
  6056. .bI "default resource path"
  6057. .iX >>>ORIPATH<<<
  6058. .iX >>>ORIPATH_1<<<
  6059. the default value for the environment variable \fB>>>ORIPATH<<<\fP
  6060. (>>>ORIGAMI_RC_PATH_STRING<<<)
  6061. .Ib
  6062. .\"}}}
  6063. .\"{{{  KBD_PATH
  6064. .bI "default keybind library path"
  6065. .iX >>>KBDPATH<<<
  6066. .iX >>>KBDPATH_1<<<
  6067. the default value for environment variable \fB>>>KBDPATH<<<\fP
  6068. (>>>KBD_PATH_STRING<<<)
  6069. .Ib
  6070. .\"}}}
  6071. .\"{{{  View
  6072. .sI "\fB>>>VIEW_TAG<<<\fP/\fB>>>sVIEW_TAG<<<\fP"
  6073. .Is
  6074. .iX >>>VIEW_TAG<<<
  6075. .iX >>>sVIEW_TAG<<<
  6076. .iX view-mode
  6077. .iX >>>O_A_VIEW<<<
  6078. .iX >>>O_D_VIEW<<<
  6079. .iX "status line"
  6080. .\"}}}
  6081. .\"{{{  DirView
  6082. .sI "\fB>>>DV_TAG<<<\fP/\fB>>>sDV_TAG<<<\fP"
  6083. .Is
  6084. .iX >>>DV_TAG<<<
  6085. .iX >>>sDV_TAG<<<
  6086. .iX directory
  6087. .iX "status line"
  6088. .\"}}}
  6089. .\"{{{  DefMac
  6090. .sI "\fB>>>DM_TAG<<<\fP/\fB>>>sDM_TAG<<<\fP"
  6091. .Is
  6092. .iX >>>DM_TAG<<<
  6093. .iX >>>sDM_TAG<<<
  6094. .iX macro
  6095. .iX >>>O_DEF_MACRO<<<
  6096. .iX "status line"
  6097. .\"}}}
  6098. .\"{{{  Folding
  6099. .sI "\fB>>>FOLD_TAG<<<\fP/\fB>>>sFOLD_TAG<<<\fP"
  6100. .Is
  6101. .iX >>>FOLD_TAG<<<
  6102. .iX >>>sFOLD_TAG<<<
  6103. .iX folding
  6104. .iX >>>O_CREATE_FOLD<<<
  6105. .iX "status line"
  6106. .\"}}}
  6107. .\"{{{  Over
  6108. .sI "\fB>>>OVER_TAG<<<\fP/\fB>>>sOVER_TAG<<<\fP"
  6109. .Is
  6110. .iX >>>OVER_TAG<<<
  6111. .iX >>>sOVER_TAG<<<
  6112. .iX overwrite-mode
  6113. .iX >>>O_D_OVER<<<
  6114. .iX >>>O_A_OVER<<<
  6115. .iX "status line"
  6116. .\"}}}
  6117. .\"{{{  AutoSave
  6118. .sI "\fB>>>AUTO_TAG<<<\fP/\fB>>>sAUTO_TAG<<<\fP"
  6119. .Is
  6120. .iX >>>O_D_AUTO_SAVE<<<
  6121. .iX >>>O_A_AUTO_SAVE<<<
  6122. .iX autosave-mode
  6123. .iX >>>AUTO_TAG<<<
  6124. .iX >>>sAUTO_TAG<<<
  6125. .iX "status line"
  6126. .\"}}}
  6127. .\"{{{  NoParse
  6128. .sI "\fB>>>NOPAR_TAG<<<\fP/\fB>>>sNOPAR_TAG<<<\fP"
  6129. .Is
  6130. .iX >>>O_D_NOPARSE<<<
  6131. .iX >>>O_A_NOPARSE<<<
  6132. .iX no-parse-mode
  6133. .iX >>>NOPAR_TAG<<<
  6134. .iX >>>sNOPAR_TAG<<<
  6135. .iX "status line"
  6136. .\"}}}
  6137. .\"{{{  hash-shift
  6138. .sI "\fB>>>H_SHIFT_TAG<<<\fP"
  6139. .Is
  6140. .iX "status line"
  6141. .\"}}}
  6142. .\"{{{  CUT_PATH
  6143. .sI "\fB>>>CUT_PATH<<<\fP"
  6144. .Is
  6145. .iX "status line"
  6146. .\"}}}
  6147. .Ib
  6148. .\"}}}
  6149. .\"}}}
  6150. .\"}}}
  6151.